什么是正确的技术有的ThreadA信号ThreadB一些事件的,而不必ThreadB坐阻塞,等待一个事件的发生?.NET:如何获得后台线程信号主线程数据?
我有一个后台线程将填写共享列表<T>。我试图找到一种方法来异步发信号通知有“数据可用于拾取”的“主”线程。
我认为用的EventWaitHandle对象设置一个事件,但我不能有我的主线程坐在一个Event.WaitOne()。
我认为有一个委托回调,但 一)我不想在主线程中的委托做的工作:在线程需要回去工作增加更多的东西 - 我不希望它等待代理执行,并且b)委托需要被编组到主线程中,但是我没有运行UI,我没有控制权来调用委托。
我认为有,简单地启动一个零间隔System.Windows.Forms.Timer(与螺纹访问计时器同步)的委托回调。这样,线程只需要坚持,因为它要求
Timer.Enabled = true;
,但似乎像一个黑客攻击。
在过去的日子里,我的对象会创建一个隐藏窗口,并让线程发送消息给隐藏窗口的HWND。我认为创建一个隐藏的控件,但我收集你不能。调用一个没有创建句柄的控件。另外,我没有用户界面:我的对象可能已经在Web服务器,服务或控制台上创建,我不希望出现图形控件 - 也不想编译对System.Windows的依赖关系。形式。
我认为有我的对象暴露的ISynchronizeInvoke接口,但后来我需要实现.Invoke(),这是我的问题。
什么是正确的技术有线程一个事件的信号线程B,没有线程B坐着等待事件发生?
BackgroundWorker的类似乎是可以异步发送notificati唯一在创建该对象的* thread *上。它在内部通过调用asyncOperation.Post()来使用AsyncOperation对象。 – 2008-09-23 21:28:55