我遇到了问题,不知道它在哪里...... 如果我在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线程。
答案 0 :(得分:0)
您可以在HandleEvent中创建一个执行您需要它的操作的线程。如果需要与UI交互,则必须将您创建的任何线程与UI线程同步。
答案 1 :(得分:0)
问题是控制驱动程序(COM)dll无法正常工作。已安装新版本,现在可以使用。