[C#]thread 不能直接對控制項取值?

用C#寫windows form 時遇到下列情形

跨執行緒作業無效: 存取控制項 'textBox1' 時所使用的執行緒與建立控制項的執行緒不同。


去查了方法 大部分為 invoke + delegate

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;
}
}


還查到比較方便但是很危險的作法

Form.CheckForIllegalCrossThreadCalls = False

這樣做直接就不檢查是否跨thread存取UI

留言

這個網誌中的熱門文章

工作後寫程式的收穫