如何关闭从Main()启动的表单,而不会出现跨线程错误

时间:2015-06-03 19:41:06

标签: c#

我有一个Windows窗体应用程序,可以从命令行调用或用作GUI。命令行选项仅用于安排程序运行已保存的任务,因此如果使用命令行选项,我不希望GUI启动。

static void Main()
{
    //code to parse the command line options
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    try
    {
        Application.Run(new MainForm());
    }
}

public MainForm()
{
    //Loading data from a file into the form.
    If (ArgumentList.Length >0)
    {
        //do command line-requested tasks
        this.close();
    }
    else
    {
        //do GUI tasks
    }
}

如何在不抛出ObjectDisposedException实例的情况下关闭MainForm窗口?如果我在

之后使用任何东西
Application.Run(new MainForm());

它不会运行,因为该表单已打开,并且在该行之后没有任何内容运行,直到表单关闭。我试过了

this.Hide();

而不是

this.Close();

但是this.Hide()在这种情况下似乎没有做任何事情,因为表单仍然显示。我知道我不应该尝试从表单中删除表单(跨线程),但如果我不希望GUI表单显示是否从命令行调用。

1 个答案:

答案 0 :(得分:2)

您应该将该代码移至Main(),并在不需要时完全避开该表单。