System.InvalidOperationException: "线程间操作无效: 从不是创建控件'TextBox2'的线程访问它" 这个错误通常发生在Windows窗体(WinForms)应用程序中,当你尝试从一个非UI线程(即不是创建控件的那个线程)直接访问或修改UI控件时。WinForms中的UI控件不是线程安全的,因此必须从创建它们的线程(通常是主线程)访问它们。
线程间操作无效: 从不是创建控件“textBox2”的线程访问它。 解决方法有两种,但是推荐第二种方法: 1、 Control.CheckForIllegalCrossThreadCalls = false; 线程开始的时候加这么一句,OK,看不到错误了~ 2、因为你这个控件是主线程创建的,它依附于创建窗体的主线程.因此,要在子线程去访问占资源的类型,我们需要跨...
线程间操作无效: 从不是创建控件的线程访问它的三种方法 如果使用多线程处理来提高 Windows 窗体应用程序的性能,则你必须确保以线程安全的方式调用控件。 访问Windows 窗体控件不是本身就线程安全的。 如果有两个或两个以上线程操作控件的状态,则可能迫使该控件处于不一致状态。 可能出现其他与线程相关的 bug,例如争用...
根据错误提示,可知在调试器中运行应用程序时,如果不是控件的创建者线程试图调用该控件时,则调试器会引发 InvalidOperationException,并提示消息:“从不是创建控件 Control Name 的线程访问它。” 说白了,就是资源访问的不一致性,控件的调用者线程不是控件的创建者线程,这是.net实现资源安全访问机制的必然结果。访问 ...
textBox1.Text = recvStr;} } //定义委托 private delegate void SetTextHander();//不带参数 private delegate void SetTextHander(string recvStr);//带参数 private void SetText(string recvStr){ if(textBox1.InvokeRequired){ SetTextHanderd = new SetTextHander(SetText);//系统自带的...
此时禁用了所有的控件合法性检查。 2.通过代理来解决(msdn) privatedelegatevoidSetTextCallback(stringtext);//在给textBox1.text赋值的地方调用以下方法即可privatevoidSetText(stringtext) {//InvokeRequired需要比较调用线程ID和创建线程ID//如果它们不相同则返回trueif(this.textBox1.InvokeRequired) ...