是否可以为使用Thread类创建的线程提供回调

时间:2012-05-08 10:40:21

标签: c# multithreading

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

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

thread.Start();

2 个答案:

答案 0 :(得分:6)

不直接。但你总是可以这样做:

new Thread(() => { StartPoll(); Callback(); })

答案 1 :(得分:3)

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

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