我有一個Windows窗體與報表模式下的ListView。對於視圖中的每個項目,我需要執行長時間運行的操作,其結果是一個數字。什麼是MsgWaitForMultipleObjects的C#等價物?
我在原生win32中執行此操作的方式是爲每個項目創建一個工作線程(當然,我不會創建無限數量的線程),然後在線程句柄數組上創建MsgWaitForMultipleObjects()。隨着每個計算完成,線程信號和主UI線程喚醒並更新。與此同時,我們抽取消息以使UI線程保持響應。
任何人都可以提供一個如何在C#中工作的例子嗎?我查看了Monitor對象,而且它看起來並不是我想要的 - 或者是在阻塞時抽取消息?
謝謝。
編輯:似乎WaitHandler.WaitAny()可能實際上泵送消息。請參閱cbrumme's treatise關於CLR中的信息抽取。
你說得對,Monitor不會收集消息。 WaitHandle可能是一個更好的地方,但是我找不到一個WaitHandle方法來提取消息。 – itowlson 2010-02-21 23:45:35
是的,我也看到了。這不是要求我能夠等待多個對象。我會等待一個事件或其他事情......我只是不想阻止用戶界面。我發現的所有樣本都會「睡覺(100)」或其他東西來強制上下文切換,這非常令人傷心。 – 2010-02-21 23:47:26
我想問題是,在WinForms中,消息循環並不明確。所以你不能直接做一個MsgWaitX,你需要的東西會引發一個事件。例如,將每個子任務作爲BackgroundWorker運行(並忘記同步基元)。 – itowlson 2010-02-22 00:13:49