- Control.Invoke 方法 (Delegate) :在擁有此控件的基礎窗口句柄的線程上執行指定的委托。
- Control.BeginInvoke 方法 (Delegate) :在創建控件的基礎句柄所在線程上異步執行指定委托。
就是一個是同步的一個是異步的,也就是一個需要等待一個不需要等待
//這個輸出123
private void button1_Click(object sender, RoutedEventArgs e) {
textblock.Text += "1";
this.Dispatcher.Invoke(new InvokeDelegate(Test));
textblock.Text += "3";
}
private void Test() {
textblock.Text += "2";
}
private delegate void InvokeDelegate();
//這個輸出132
private void button1_Click(object sender, RoutedEventArgs e) {
textblock.Text += "1";
this.Dispatcher.BeginInvoke(new InvokeDelegate(Test));
textblock.Text += "3";
}
private void Test() {
textblock.Text += "2";
}
Invoke是線程中比較重要的一個東西,在多線程的編程中,平常在更新界面的時候,可以用UI線程去做來減輕工作線程的負擔。比如下面這樣放在線程中:
private void button1_Click(object sender, RoutedEventArgs e) {
Thread invokeThread = new Thread(new ThreadStart(Method));
invokeThread.Start();
//...運算代碼
}
private void Method(){
this.Dispatcher.BeginInvoke(new InvokeDelegate(Test));
}
private void Test() {
textblock.Text += "123";
}
private delegate void InvokeDelegate();
簡單寫法如下:
private void button_Click(object sender, RoutedEventArgs e) {
this.Dispatcher.BeginInvoke(new Action(() => { this.textblock.Text += "123"; }));
}

