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

本文关键字:错误 线程 窗体 Main 何关闭 启动 | 更新日期: 2023-09-27 17:53:00

我有一个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
    }
}

我如何关闭MainForm窗口而不使ObjectDisposedException的实例被抛出?如果我在

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

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

this.Hide();

代替

this.Close();

但是this. hide()在这种情况下似乎没有做任何事情,因为表单仍然显示。我知道我不应该尝试从窗体内关闭窗体(交叉线程),但如果我不希望GUI窗体显示从命令行调用

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

您应该将该代码移动到Main(),如果不需要它,则完全避免该表单。