- C# code
我建立的程序是MDI程序,以下代码是在MDI子窗口执行的。为什么程序自动消息掉?什么出错了? threads = new Thread[100]; for (int i = 0; i < threads.Length; i++) { threads[i] = new Thread(ThreadProc); threads[i].Start(this); } Thread t = new Thread(ThreadProc); t.Start(); void Do() {A.Text="aaaa"; } void ThreadProc(Object sender) { (sender as FormRefres).Do(); }
------解决方案--------------------
你直接在 ThreadProc方法写一个输出吧 离真理不远了
------解决方案--------------------
问题出在A.Text="aaaa";
由于文本框对象A是在主线程创建的,其他线程必须invoke创建者线程(主线程),请求主线程改写控件状态。
CheckForIllegalCrossThreadCalls =false;
这是.net早期版本的解决方案,不检测非法的跨线程调用,可以提高速度但存在一定的风险。
在后期版本中不建议使用该方案,而是使用invoke。
if(A.InvokeRequired)
{
...
}