大约一周前,我问了一个有关 activex 和 UDP 的问题。这里是:
C# UDP Socket 客户端和服务器 https://stackoverflow.com/questions/19786668/c-sharp-udp-socket-client-and-server
现在,我创建了两个应用程序,其中一个(发送方)通过 UDP 发送预定义的字符串。另一个是从网页调用的activex组件,它的线程在后台工作。一旦 UDP 消息到达,它就会做它的事情(写入数据库、写入 log.txt 等)。
我需要的最后一件事是返回数据(尚未确定它是字符串还是其他数据)。但是,调用的 activex 中的方法必须是 void,因为如果将其设置为字符串,则线程将无法工作,并且只有第一条消息会到达。
我的问题是,该怎么做?如何从 void 函数返回数据?例如,Web 应用程序现在像这样调用 activex DLL:
ClassLibrary1.Class1 activex = new ClassLibrary1.Class1();
activex.StartThread();
StartThread() 调用侦听线程,它在后台工作,一旦 UDP 消息到达,它就会执行我上面所说的一些操作。
我怎样才能用线程(事件)返回值并且网络应用程序将捕获它并使用它?
多谢。
您可以使用事件(实现 Observable 模式)来提醒任何侦听器新消息已到达:
public class NewMessageArgs : EventArgs
{
public string Message { get; private set; }
public NewMessageArgs(string message)
{
Message = message;
}
}
public class ActiveXComponent
{
public event EventHandler<NewMessageArgs> OnMessage;
public void StartThread()
{
while (true)
{
//do stuff
//raise "message received" event
if (OnMessage != null)
OnMessage(this, new NewMessageArgs("hi"));
}
}
}
然后您可以像这样监听这些事件:
ActiveXComponent activex = new ActiveXComponent();
activex.OnMessage += ProcessMessage;
activex.StartThread();
public void ProcessMessage(object sender, NewMessageArgs args)
{
var msg = args.Message;
//process
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)