在WinForm 处置惩罚多线程接见主线程的控件时刻,就会涌现如图所示的毛病对话框:
解决计划:
计划一:去掉线程接见主线程UI控件的平安搜检,运用:
Control.CheckForIllegalCrossThreadCalls = false;
计划二:运用托付,将对主线程的UI控件操纵推送了该线程的音讯行列里,运用的要领为:Invoke要领和BeginInvoke要领,前一个是同步要领,后一个为异步要领;
运用同步invoke要领的程序代码以下,已经由历程测试:
注 :运用异步BeginInvoke要领的历程和同步invoke要领一样,把invoke要领换成BeginInvoke要领就能够;
计划三:运用同步上下文:SynchronizationContext要领,该要领是获得主线程的上下文信息,然后在子线程将接见UI控件要领推送到UI上下文的音讯行列里,运用POST或许Send;
计划四:在定名空间: System.ComponentModel 里有个BackgroundWorker类,它是在一个零丁的线程里实行,下图拷贝官网申明:
代码 以下,测试经由历程 :
题目扩大:
为何 在 winform上增加TextBox控件,然后经由历程另一个线程接见UI主线程的控件,不报错,一般经由历程???烦请高手见教!!!
图以下:
以上就是C# WinForm跨线程接见控件的图文详解的细致内容,更多请关注ki4网别的相干文章!