由于隐式线程处理,C# 无法调度事件

本文关键字:调度 事件 于隐式 线程 处理 | 更新日期: 2023-09-27 18:31:28

>我试图编写一个类来制作一个简单的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。

提前致谢

由于隐式线程处理,C# 无法调度事件

DataReceived线程

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

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

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