C#Com事件未触发

时间:2012-01-04 16:35:05

标签: c# multithreading events com

我遇到了问题,不知道它在哪里...... 如果我在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线程。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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