使用 Invoke() 显示来自 Threading.Time() 线程的表单

Using Invoke() to show Form from Threading.Time() thread

我有以下内容:

  public static Form1 MainForm = new Form1();
    static ManualResetEvent _running = new ManualResetEvent(false);

    [MTAThread]
    private static void Main()
    {
        int startin = 60 - DateTime.Now.Second;
        var t = new System.Threading.Timer(o => Analyze(),
            null, startin*1000, 60000);

        _running.WaitOne();
    }

    public static void Analyze()
    {
        Action a = new Action(() => MainForm.ShowDialog());
        MainForm.Invoke(a);
    }

我很难尝试显示我拥有的唯一表单 - MainForm。

我做错了什么?

当您调用 MainForm.Invoke 时,您是在告诉表单安排应用程序循环中提供的操作 运行,表单正在 运行ning 中。当您调用该方法您的表单 没有应用程序循环 ,因此 运行 您安排的操作没有任何意义,因此它不会 运行 .

具有讽刺意味的是,您尝试在应用程序循环中安排的操作是应用程序循环的创建。

您需要启动您的应用程序循环(使用 Application.Run),创建您的表单,完成后您可以安排该应用程序执行的工作。