【发布时间】:2010-01-18 13:24:35
【问题描述】:
我正在编写一个仅在我公司内部使用的 c# 组件。该组件封装了与特定桌面应用程序需要与之通信的许多服务器的通信。服务器可以向组件发送未经请求的消息,这些消息在单独的线程中“捕获”。
我希望这个组件的大部分在其创建线程的上下文中执行。我不希望单独的消息线程进行任何消息处理。相反,我想通知主线程有一条消息等待处理。想要在创建线程的上下文下执行的原因是库的用户可能不知道多线程,如果可能的话我希望能够同步所有操作。
是否有一种简单的方法可以向正在运行的线程发出信号?主线程会不停的做各种处理,消息线程会不停的旋转等待消息。可能值得注意的是,消息线程被封装在第三方库中。一旦收到消息,它就会执行回调。我希望回调执行类似 mainthread.notify(message) 的操作。
编辑: 抱歉,我不太清楚我想要主线程做什么。我不希望主线程立即处理消息线程发送的消息。我希望它在不久的将来某个时间处理该消息(例如 WinForms 消息循环的工作方式)。
编辑 2:
场景:
Console App created on Thread1
Thread2 created, which spins listening for Messages
Console App runs as normal
Message arrives on Thread2
Thread2 fires event MessageReady(sender, message)
Thread2 continues spinning
At the earliest convenience, Thread1 processes the message from MessageReady
我已经阅读了一些资料,看来将代码编组到另一个线程是一种相当困难的方式,我怀疑同步这个过程是否值得。
【问题讨论】:
-
我感觉你没有使用 WCF。我建议你这样做。
-
不,我没有使用 WCF。发送/检索到服务器的消息是经过许可的,并且提供了库来使用它们。我不认为 WCF 可以在这里帮助我。
标签: c# signals multithreading