>我试图编写一个类来制作一个简单的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 is unhandling HResult=-2146233079 Message=Operación no válida a través de subprocesos: Se tuvo acceso al control 'textBox2' desde un subproceso distinto a aquel en que lo creó. Source=System.Windows.Forms
我找到了涉及 Thread 类的解决方案,但我不使用它,我希望这个类是通用的,用于不同的应用程序,所以我不能从这个类直接引用 Form1。
提前致谢
DataReceived
线程在系统管理的 IO 完成端口线程上引发。
该线程无法访问 UI。
若要解决此问题,可以在 UI 层中的任何控件上调用 Invoke()
方法,并传递执行 UI 工作的委托。
还可以从非 UI 类(在构造函数的字段中)中的 UI 线程捕获SynchronizationContext
,然后调用其 Post()
方法在 UI 线程上引发整个事件。