一、简介
[WinForm]关于InvokeRequired与Invoke_Jlins的博客-CSDN博客_invokerequired
c#是禁止夸线程直接访问控件。InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它。那么就需要使用Invoke
或者BeginInvoke
方法,通过一个委托把调用封送到控件所属的线程上执行。
InvokeRequired==true
Windows 中的控件被绑定到特定的线程,没有线程安全性,因此从另外一个线程调用控件的方法就必须使用控件的一个invoke 方法来将调用封到适当的线程,这个做法保证了控件的安全。
public void DoSomething()
{
if(this.InvokeRequired==true)
{
// InvokeRequired==true,说明是非创建线程在访问当前的UI控件
this.BeginInvoke(new MethodInvoker(() => {
// DoMywork();
}));
}
else
{
// DoMywork();
}
}