如何解决为什么在线程池线程中创建 winform 对象会破坏异步方法?
我知道表单应该在 STA 线程上制作,因为表单的工作方式。但是我假设我可以在任何线程中创建一个表单对象,只要我实际在 STA 线程中“运行”它,比如 form.Show()
、form.ShowDialog()
或 Application.Run(form)
,所以它的消息循环正在 STA 线程上运行。
如果我运行此代码:
public async Task Test1() {
Console.WriteLine($"Threadpool: {Thread.CurrentThread.IsThreadPoolThread}");
Console.WriteLine("Start");
var form = new TextForm(); // Some basic form
Console.WriteLine("Middle");
await Task.Yield(); // This await never continues if run on threadpool
Console.WriteLine("End");
}
...然后在 STA 线程上,代码将立即到达“End”,但如果在线程池线程上运行,则代码永远不会到达“End”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。