【发布时间】:2020-03-10 23:39:38
【问题描述】:
我必须手动生成一个新线程,所以我可以调用.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()? -
我要做的基本上是
await Task.Run()。但由于 STA 限制,我不能这样做。我可以Thread.Join(),但同时不会阻塞 UI 线程吗? -
我忘记了示例中的 ApartmentState 部分。我现在已经添加了。我的错。
-
这个问题能解决你的实际问题吗? stackoverflow.com/questions/16720496/…
标签: c# multithreading sta