跨线程调用控件会出现这个错误的原因是因为:.NET禁止了跨线程调用控件, 否则谁都可以操作控件,最后可能造成错误。 所以不是在创建控件所在的线程内调用就会发生这样的错误。
在控件的线程中遇到阻塞时可以通过创建另一个线程来解决界面的阻塞问题,例:new Thread(ImageDealThread).Start();将控件所需要处理的事件封装到一个函数里面,通过线程进行调用,
跨线程访问控件可以通过定义一个委托(delegate)来将参数与方法传递给控件所在的线程,再通过Invoke来调用。
解决方法:
Action delega1 = async () =>
{
.......
};
//使用异步多线程更新
if (this.InvokeRequired)
{
new Thread(() => this.Invoke(delega1)).Start();
}
else
{
delega1();
}
C# 错题集(一)错误:线程间操作无效,从不是创建控件的线程访问它。
于 2022-06-24 17:06:22 首次发布