2009-10-25 49 views
0

在我的應用程序中,每個線程處理一個表單,並且它的事件應該在處理表單的線程中執行。處理特定表單的事件

是否有辦法處理特定System.Windows.Form實例的事件? Application.Run不適合我的設計,並且Application.DoEvents處理由應用程序實例化的每個Form的事件。

回答

1

你會遇到一些問題,因爲你所有的Form's will be on the UI Thread,因此事件不是「自由線程」。建議的處理方法是將長時間運行的任務推送到BackgroundWorkerThreadPool。然後,您將使用Invoke在UI線程上執行任務,從而在UI仍然是單線程時處理多線程操作。

+0

我使用OpenGL在兩個窗口上渲染。渲染髮生在不同的線程上(包含渲染結果的每個表單都有一個線程)。 在開始渲染線程之後調用Application.Run,​​所有事件都在另一個線程(主線程)中處理:這意味着我必須將渲染線程與主線程(Application.DoEvents或Application.Run的調用者)同步? – Luca

+0

就Windows事件而言,這些只會在單個線程中進行。所以你需要與任何線程處理'DoEvents'進行協調。 – user7116