C#Com事件未启动

本文关键字:启动 事件 C#Com | 更新日期: 2023-09-27 18:19:31

我有个问题,不知道它在哪里。。。如果我在windows窗体应用程序中这样做:

private void btnListen_Click(...)
{
    var t = new Thread(DoWork);
    t.SetAppartmentState(ApartmentState.STA);
    t.Start();
}
the DoWork method...
private void DoWork()
{
    var controls = GetControls();
    foreach (var c in controls)
    {
        control.OnEvent += HandleEvent;
    }
}
private void HandleEvent()
{
    DoSomething...
}

控件是注册到regsrv32 的Wrapped Com对象

在控件上激发事件时,我不会在Windows窗体应用程序HandleEvent方法中接收事件。

但是如果我把代码改成这个:

private void btnListen_Click(...)
{
    DoWork();
}

一切正常。我需要在另一个线程中执行此操作。

为什么在使用线程时这不起作用?请帮忙。

感谢

编辑:我也在windows服务中尝试过。像这样:

OnStart()
{
    Task t = new Task(()=>DoWork);
    t.Start();
}

其他一切都是一样的,仍然不起作用。这里没有UI线程。

C#Com事件未启动

您可以在HandleEvent中创建一个线程来执行您需要它执行的操作。如果您需要它与UI交互,则必须将您创建的任何线程与UI线程同步。

问题是控制驱动程序(COM)dll无法工作。安装了新版本,现在可以工作了。