4

是否可以为使用 Thread 类创建的线程提供回调(宣布活动完成)。我已经通过以下方式创建了线程,但找不到提供回调的方法。

Thread thread = new Thread(StartPoll);
thread.SetApartmentState(ApartmentState.STA);

thread.Start();
4

2 回答 2

5

不是直接的。但是您总是可以执行以下操作:

new Thread(() => { StartPoll(); Callback(); })
于 2012-05-08T10:44:01.857 回答
3

将公寓状态设置为 STA 是不够的,第二个要求是您必须泵送一个消息循环。Winforms 或 WPF 中的 Application.Run()。它实际上是允许封送对特定线程的调用的消息循环。分别由 Control.Begin/Invoke 和 Dispatcher.Begin/Invoke() 实现。

然而,这更多的是 UI 实现细节。通用解决方案与 UI 线程所做的非常相似,您使用线程安全队列和“主”线程中的循环从队列中读取对象。就像您可以调用的委托一样。生产者/消费者问题的标准解决方案。.NET 4 BlockingCollection 类使它变得容易。重写线程代码以使其循环并保持对工作人员请求的响应并不总是那么容易。

于 2012-05-08T12:38:38.213 回答