让ThreadA向某个事件的ThreadB发出信号,而不让ThreadB被阻塞等待事件发生的正确技术是什么?
我有一个后台线程将填充一个共享列表<T>。我正在尝试找到一种方法来异步向“主”线程发出信号,表明有数据可供提取。
我考虑使用 EventWaitHandle 对象设置一个事件,但我不能让我的主线程坐在 Event.WaitOne() 上。
我考虑有一个委托回调,但是a)我不希望主线程在委托中工作:线程需要重新开始工作添加更多的东西——我不希望它在委托执行时等待,并且b ) 委托需要编组到主线程上,但我没有运行 UI,我没有控制权来 .Invoke 委托反对。
我认为有一个委托回调,它只是启动一个零间隔 System.Windows.Forms.Timer(线程访问同步的定时器)。这样线程只需要在调用时被卡住
Timer.Enabled = true;
但这似乎是一个黑客行为。
在过去,我的对象会创建一个隐藏窗口,并让线程将消息发布到该隐藏窗口的 HWND。我考虑过创建一个隐藏控件,但我认为你不能在没有创建句柄的控件上调用。另外,我没有 UI:我的对象可能是在 Web 服务器、服务或控制台上创建的,我不希望出现图形控件 - 我也不希望编译对 System.Windows 的依赖项。形式。
我考虑让我的对象公开一个 ISynchronizeInvoke 接口,但是我需要实现 .Invoke(),这就是我的问题。
让线程 A 向某个事件的线程 B 发出信号,而不让线程 B 被阻塞等待事件发生的正确技术是什么?