由于 Windows 窗体控件本质上不是线程安全的。因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用和死锁的情况。于是在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperationException 

本文用一个很简单的示例来讲解这个问题(在窗体上放一个TextBox和一个Button,点击Button后,在新建的线程中设置TextBox的值)

解决办法一: 关闭该异常检测的方式来避免异常的出现

经过测试发现此种方法虽然避免了异常的抛出,但是并不能保证程序运行结果的正确性 (比如多个线程同时设置TextBox1的Text时,很难预计最终TextBox1的Text是什么)

 1如何在多线程中调用winform窗体控件using System;
 2如何在多线程中调用winform窗体控件using System.Collections.Generic;
 3如何在多线程中调用winform窗体控件using System.ComponentModel;
 4如何在多线程中调用winform窗体控件using System.Data;
 5如何在多线程中调用winform窗体控件using System.Drawing;
 6如何在多线程中调用winform窗体控件using System.Text;
 7如何在多线程中调用winform窗体控件using System.Windows.Forms;
 8如何在多线程中调用winform窗体控件using System.Threading;
 9如何在多线程中调用winform窗体控件
10如何在多线程中调用winform窗体控件namespace winformTest
11}

解决办法二:通过委托安全调用
 1如何在多线程中调用winform窗体控件using System;
 2如何在多线程中调用winform窗体控件using System.Collections.Generic;
 3如何在多线程中调用winform窗体控件using System.ComponentModel;
 4如何在多线程中调用winform窗体控件using System.Data;
 5如何在多线程中调用winform窗体控件using System.Drawing;
 6如何在多线程中调用winform窗体控件using System.Text;
 7如何在多线程中调用winform窗体控件using System.Windows.Forms;
 8如何在多线程中调用winform窗体控件
 9如何在多线程中调用winform窗体控件namespace winformTest
10}

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-03
  • 2021-07-01
  • 2021-07-09
  • 2022-12-23
猜你喜欢
  • 2022-01-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案