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