一、原因分析
跨线程调用控件会出现这个错误的原因是因为:.NET禁止了跨线程调用控件, 否则谁都可以操作控件,最后可能造成错误。 所以不是在创建控件所在的线程内调用就会发生这样的错误。
二、解决办法
方法1:设置CheckForIllegalCrossThreadCalls =false 是能去掉这个检查的,但是这不是标准的作法.
方法2:定义一个委托(delegate),委托(delegate)可以将参数与方法传递给控件所在的线程,并由控件所在的线程执行,通过Invoke来调用,这样可以完美的解决此类问题。
Action action = () =>
{
TimeBox.Text = TimeString;
ResultBox.Text = hv_ResultStr;
DisplayImageHalconWindow(AcqImage, GrayImage);
DisplayImageHalconWindow(ThresholdImage, MeanImage);
};
Invoke(action);
三、总结
在控件的线程中遇到阻塞时可以通过创建另一个线程来解决界面的阻塞问题,例:new Thread(ImageDealThread).Start();将控件所需要处理的事件封装到一个函数里面,通过线程进行调用,跨线程访问控件可以通过定义一个委托(delegate)来将参数与方法传递给控件所在的线程,再通过Invoke来调用。文章来源:https://www.toymoban.com/news/detail-616772.html
错误之处,欢迎大家指出!文章来源地址https://www.toymoban.com/news/detail-616772.html
到了这里,关于C#中错误:线程间操作无效,从不是创建控件的线程访问它。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!