【发布时间】:2021-08-25 15:19:22
【问题描述】:
在没有对话框的情况下调用Application.Run() 后,如何调用tread/form 的消息循环?原因是我想准备(并稍后显示)一个可点击的对话框,即使主应用程序中显示了模式对话框。
static Form1 dialog;
private static void CreateDialog(object obj)
{
dialog = new Form1();
Application.Run();
}
static void Main(string[] args)
{
var thread = new Thread(CreateDialog);
thread.Start();
Thread.Sleep(2000); //only for demonstration
dialog.Invoke((Action)dialog.Show); //InvalidOperationException: need window handle first
}
【问题讨论】:
-
不要创建多个 UI 线程。你只是在为失败做准备。维护单个 UI 线程和单个消息循环。
-
模态对话框是邪恶的!不要使用它。
-
除非您是 UX 专家,否则请遵守约定。模态对话框的要点在于它阻止了 UI 其他部分的事件。如果您不想要这种行为,则不需要模式对话框。也许您需要一个带有TopMost 属性集的非模态对话框。
-
@Loathing 感谢您的链接。这为我指出了一个解决方案,尽管我不得不承认它的代码比我预期的要多,并且仍然给我留下了一个问题,当您似乎无法在这种情况下调用代码时,
Application.Run()的目的是什么......
标签: c# winforms message-loop