0

我正在尝试编写一个类来制作一个简单的 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 Message=Operación no válida a través de subprocesos: Set tuvo acceso al control 'textBox2' desde un subproceso distinto aquel en que lo creó。源=System.Windows.Forms

我找到了涉及 Thread 类的解决方案,但我没有使用它,我希望这个类是通用的以用于不同的应用程序,所以我不能从这个类直接引用 Form1。

提前致谢

4

1 回答 1

0

DataReceived线程在系统管理的 IO 完成端口线程上引发。
该线程无法访问 UI。

要解决此问题,您可以在 UI 层中的任何控件上调用该Invoke()方法,并传递一个执行 UI 工作的委托。

您还可以SynchronizationContext在非 UI 类中(在构造函数中的字段中)从 UI 线程捕获,然后调用其Post()方法以在 UI 线程上引发整个事件。

于 2013-09-16T02:32:51.203 回答