如何解决C#的WinForm跨线程访问控件问题-创新互联

这篇文章运用简单易懂的例子给大家介绍如何解决C#的WinForm跨线程访问控件问题,文章内容步步紧凑,希望大家根据这篇文章可以有所收获。

创新互联成立于2013年,先为拉萨等服务建站,拉萨等地企业,进行企业商务咨询服务。为拉萨企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

问题出现:

在WinForm 处理多线程访问主线程的控件时候,就会出现如图所示的错误对话框:

 如何解决C#的WinForm跨线程访问控件问题

解决方案:

 方案一:去掉线程访问主线程UI控件的安全检查,使用:

 Control.CheckForIllegalCrossThreadCalls = false;

如何解决C#的WinForm跨线程访问控件问题

方案二:使用委托,将对主线程的UI控件操作推送了该线程的消息队列里,使用的方法为:Invoke方法和BeginInvoke方法,前一个是同步方法,后一个为异步方法;

使用同步invoke方法的程序代码如下,已经通过测试:

如何解决C#的WinForm跨线程访问控件问题

注 :使用异步BeginInvoke方法的过程和同步invoke方法一样,把invoke方法换成BeginInvoke方法就可以;

方案三:使用同步上下文:SynchronizationContext方法,该方法是取得主线程的上下文信息,然后在子线程将访问UI控件方法推送到UI上下文的消息队列里,使用POST或者Send;

如何解决C#的WinForm跨线程访问控件问题

方案四:在命名空间:  System.ComponentModel 里有个BackgroundWorker类,它是在一个单独的线程里执行,下图拷贝官网说明:

如何解决C#的WinForm跨线程访问控件问题

代码 如下,测试通过 :

如何解决C#的WinForm跨线程访问控件问题

 问题扩展:

以上就是解决C#的WinForm跨线程访问控件问题的方法,详细使用情况还需要大家自己亲自动手使用过才能领会。如果想了解更多相关内容,欢迎关注创新互联成都网站设计公司行业资讯频道!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻标题:如何解决C#的WinForm跨线程访问控件问题-创新互联
网页地址:http://hbruida.cn/article/cdjepg.html