我试着编写一个类来制作一个简单的RFID阅读器,在这种情况下它是COM,我想在不同的RFID是红色时发送一个事件,但是由于线程我得到一个错误,我没有直接使用线程,但是SerialPort会这样做。
class LectorCOM
{
SerialPort puerto;
public event EventHandler OnLectura;
public LectorCOM()
{
puerto = new SerialPort();
...
puerto.DataReceived += delegate {
this.OnLectura(this,EventArgs.Empty);
};
}
}
但它会引发以下错误:
System.InvalidOperationException未处理 的HResult = -2146233079 消息=Operaciónnoválidaratravésdesubprocesos:Se tuvo acceso al control'textBox2'desde un subproceso distinguished to a aquel en quelocreó。 源= System.Windows.Forms的
我找到了涉及Thread类的解决方案,但我没有使用它,我希望这个类在不同的应用程序中是通用的,所以我不能直接从这个类引用Form1。
提前致谢
答案 0 :(得分:0)
在系统管理的IO完成端口线程上引发DataReceived
线程
该线程无法访问UI。
要解决此问题,您可以在UI图层中的任何控件上调用Invoke()
方法,并传递执行UI工作的委托。
您还可以从非UI类中的UI线程(在构造函数的字段中)捕获SynchronizationContext
,然后调用其Post()
方法以在UI线程上引发整个事件