【发布时间】:2021-11-22 20:24:50
【问题描述】:
我目前正在尝试将 .NET 通用主机内容与 WinForms 结合起来,并且正在尝试类似这样的东西:
var mainmenu = new Thread(() => Application.Run(_mainMenuView as Form));
mainmenu.SetApartmentState(ApartmentState.STA);
mainmenu.Start();
_mainMenuView 是我从 DI yadayadayada 获得的 MainMenuView 表单实现的接口。
我现在的问题是:
- 这会产生不可预见的后果吗?
- 我需要将线程重新加入我的“主”线程吗?
- 如果我只是关闭窗体,线程会死吗?
- 通过界面获取或设置属性有多安全?我需要关心 Invocation 吗?
感谢您的帮助
【问题讨论】:
-
这就像你在主线程运行它然后从另一个线程访问表单一样。因此,例如所有 UI 交互都应该通过调度程序(Invoke)。
-
我这样做是为了在应用程序启动期间显示启动画面而没有任何问题(已经这样做了十多年,所以我现在可能已经注意到任何问题了!)。然而,闪屏的作用并不大,用户交互也很少,所以 YMMV。
标签: c# .net multithreading winforms thread-safety