我目前需要手动创建一个新线程,以便能够调用 .SetApartmentState(ApartmentState.STA)
。这意味着(据我所知)我不能使用 Task
。但是我想知道线程何时完成运行,就像可以与async
一起使用的await
一样。然而,我能想到的最好方法只是循环不断检查Thread.IsAlive
,如下所示:
var thread = new Thread(() =>
{
// my code here
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
while(thread.IsAlive)
{
// Wait 100 ms
Thread.Sleep(100);
}
只要线程不陷入停顿,这段代码应该是有效的,但它看起来有些笨拙。有没有更聪明的方法来检查线程何时完成(或死亡)?
这只是为了避免阻塞GUI线程,所以任何小的性能损失都可以接受(比如几百毫秒)。
Thread.Join()
是一个方法,它可以暂停当前线程的执行,直到调用这个方法的线程完成执行为止。 - Ian Mercerawait Task.Run()
。但由于STA约束,我无法这样做。我可以使用Thread.Join()
,但这是否会同时阻塞UI线程呢? - Jakob Busk Sørensen