最近在写串口通信
今天中午突然遇到一个问题
我在serialport的DataReceived事件中访问 主界面的控件 突然出现了下面的错误
经过百度 google 知道 这是由于线程安全所造成的 VS2005及以上新增的一个特性
访问非自己线程的东西 会发生如上类似的错误
解决的方法如下
从程序设计上来说,只有创建界面的主线程才能访问界面上的控件,所以会出错.
当然,设置CheckForIllegalCrossThreadCalls =false 是能去掉这个检查的,但是这不是标准的作法.
标准的作法是在访问界面控件时,访问下窗体的 InvokeRequired 属性,如果为false就可以直接访问,
否则就是跨线程访问;此时,创建一个delegate,并通过Invoke() 来调用它.
详细的信息,可以在网上搜一下C#的跨线程访问,这方面的资料很多.