什麼是正確的技術有的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