背景
通過一個輔助線程計算出的一個值賦給textBox1.text;
解決辦法
1.直接在窗體的構造函數中添加:
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
此時禁用了所有的控件合法性檢查。
2.通過代理來解決(msdn)
private delegate void SetTextCallback(string text); //在給textBox1.text賦值的地方調用以下方法即可 private void SetText(string text) { // InvokeRequired需要比較調用線程ID和創建線程ID // 如果它們不相同則返回true if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.textBox1.Text = text; } }
這里主要用到了.NET中的 delegate。
關於delegate的詳述,請參閱: 談C#中的Delegate
