是否有與Android的runOnUiThread等效的C#/ Windows Forms?是否存在與Android的runOnUiThread等效的C#/ Windows窗體?
例如,假設我正在一個工作線程上運行一個(長時間運行的)任務,並且最後我想將結果發佈到一個GUI控件上(當然,我不能從工作線程中完成) 。有沒有像runOnUiThread這樣簡單的函數可以讓我發佈刷新顯示以供UI線程處理?
是否有與Android的runOnUiThread等效的C#/ Windows Forms?是否存在與Android的runOnUiThread等效的C#/ Windows窗體?
例如,假設我正在一個工作線程上運行一個(長時間運行的)任務,並且最後我想將結果發佈到一個GUI控件上(當然,我不能從工作線程中完成) 。有沒有像runOnUiThread這樣簡單的函數可以讓我發佈刷新顯示以供UI線程處理?
WinForms中的每個控件都繼承了Invoke
和BeginInvoke
方法。
Invoke將同步運行代理,而BeginInvoke異步運行它。
看看Control.Invoke
的方法。
從MSDN:「在擁有該控件的基礎窗口句柄的線程上執行指定的委託。
如果您有權訪問winforms控件或窗體,只需在該控件或窗體上調用Control.Invoke
或Control.BeginInvoke
即可。
做到這一點的典型方法是用一個System.Windows.Forms.Control的:
control.BeginInvoke((MethodInvoker)delegate { ... });
但是,控件的句柄必須已經在UI線程上初始化。一個簡單的
IntPtr ignored = control.Handle;
在UI線程將完成。
何時使用同步Invoke更適合使用異步BeginInvoke? – scatmoi
幾乎沒有。如果替代方案使用一堆異步消息溢出UI輸入隊列,它有時很有用。 –