1. 程式人生 > >C#中Invoke的串列埠接收事件中的用法

C#中Invoke的串列埠接收事件中的用法

在用.NET Framework框架的WinForm構建GUI程式介面時,如果要在串列埠Serilport控制元件的DataReceived事件響應函式中改變控制元件的狀態,直接更改會報錯,可以使用Invoke()解決。例如:
this.Invoke(new Action(()=>
{
textBox1.Text += “2”;
}));
Invoke()的作用是:在應用程式的主執行緒上執行指定的委託。一般應用:在輔助執行緒中修改UI執行緒( 主執行緒 )中物件的屬性時,呼叫this.Invoke();
Invoke 和 BeginInvoke 就是為了解決這個問題而出現的,使你在多執行緒中安全的更新介面顯示。
正確的做法是將工作執行緒中涉及更新介面的程式碼封裝為一個方法,通過 Invoke 或者 BeginInvoke 去呼叫,兩者的區別就是一個導致工作執行緒等待,而另外一個則不會。
而所謂的“一面響應操作,一面新增節點”永遠只能是相對的,使 UI 執行緒的負擔不至於太大而已,因為介面的正確更新始終要通過 UI 執行緒去做,我們要做的事情是在工作執行緒中包攬大部分的運算

,而將對純粹的介面更新放到 UI 執行緒中去做,這樣也就達到了減輕 UI 執行緒負擔的目的了。