-Begin-
起因
很多C#初学者,都遇到过这样的问题——线程间操作无效,从不是创建控件的线程访问它。
今天就这个问题,展开分析。
溯源
先说下这个问题产生的根源。
大家都知道,程序运行起来之后,首先会有一个主线程,主线程用于处理控件生成、界面渲染、事件响应、逻辑处理等操作,因此我们可以理解为窗体里的控件是属于主线程的。
我们也知道多线程,如果我们想实现与主线程同时执行另一件事,一般会去使用多线程。
因此多线程,从某种意义上来说,它和主线程都属于“线程”这个家族,他们的身份是“平等”的,就像你和你同事之间的关系一样。
那么,试想一下,如果你同事有一天想从你手上把你的PLC或者上位机项目程序拿过去,你愿不愿意?
所以,如果在多线程里操作主线程的控件,你觉得主线程会不会答应,当然不会,主线程不答应的最直接表现就是,它会直接给一个报错,权当警告,如下图所示: