2014年7月1日 星期二

C# thread 不能直接對控制項取值,必須使用 invoke + delegate

跨執行緒傳值作業無效的解決方法

1.建立委派傳值

public delegate void ModifyTextBoxDelegate(String s);
private void ModifyTextBox(String s)
{
if (textBox1.InvokeRequired)
{
ModifyTextBoxDelegate d = new ModifyTextBoxDelegate(ModifyTextBox);
this.Invoke(d, s);
}
else
{
textBox1.Text = s;
}
}


2.設定可接受其他Thread傳值

Form.CheckForIllegalCrossThreadCalls = False

方便但是很危險的作法
直接就不檢查是否跨thread來存取UI

沒有留言:

張貼留言