首页 > 解决方案 > Application.Run() 之后如何调用消息循环

问题描述

Application.Run()在没有对话框的情况下调用后,如何调用胎面/表单的消息循环?原因是我想准备(并稍后显示)一个可单击的对话框,即使在主应用程序中显示了模态对话框。

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
}

标签: c#winformsmessage-loop

解决方案


我在这里找到了解决方案:https ://stackoverflow.com/a/4411493/1520078 我只需要访问Handle表单的属性就可以从现在开始调用它。

private static void CreateDialog(object obj)
{
    dialog = new Form1();
    _ = dialog.Handle;
    Application.Run();
}

现在这不再抛出:

dialog.Invoke((Action)dialog.Show); 

推荐阅读