2009年12月2日 星期三

C# - 多執行緒(thread)+視窗元件(form)+委派(delegate)=發生問題

在寫C#的視窗應用程式,若使用多執行緒,並用委派和事件的方式使用到視窗元件,會碰到視窗元件的資料完整性問題,例如要輸出文字到文字方塊上。此時可以在被呼叫的方法裡加上判斷條件,防範此問題。

範例的委派宣告為:
public delegate void PrintDelegate(string message);

方法應定義在擁有視窗元件的類別中:
public void PrintFuction(string str){
  if(textBox.InvokeRequired){
    this.Invoke(new PrintDelegate(str), new object[] { str });
  }else{
    textBox.Text += str;
  }
}

沒有留言: