使用Invoke()从Threading.Time()线程显示Form

时间:2015-06-18 16:10:39

标签: c# .net multithreading winforms .net-3.5

我有以下内容:

  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。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

当您致电MainForm.Invoke时,您告诉表单安排从应用程序循环运行的操作,表单正在运行。当您调用该方法时,表单没有应用程序循环,因此无法运行您已安排的操作,因此无法运行。

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

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