如何在 Application.Run() 之后调用消息循环

How to invoke into message loop after Application.Run()

如何在没有对话框的情况下调用 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
}

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

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

现在不再抛出:

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