以下引用自: c#使用MethodInvoker解决跨线程访问控件
net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线程访问作检查,Control.CheckForIllegalCrossThreadCalls = false;可以实现访问,但是出不出错不敢保证C#跨线程访问控件运行时错误。
使用MethodInvoker即可解决
看看系统定义, 与event 的区别
public delegate void MethodInvoker();
public delegate void EventHandler(object sender, EventArgs e);
简单来说 :
MethodInvoker 是不带参数的委托。
EventHandler 是可带参数的委托
我是这样理解的, 开启新线程 threadRun, 在新线程中使用MethodInvoker 委托执行 run()方法, 这个时候 run() 方法其实是在主线程中执行的, 这样就避免了 跨线程访问控件, 以下是我的测试代码: