当点击消息框中的“确定”按钮后如何关闭Windows表单?

3

程序有两种形式:登录和登录后的主要表单。启动程序时,它会连接到数据库并检查是否有新版本可用,如果有,则立即显示一个消息框,让用户知道需要下载新版本。

当用户点击确定后,应用程序需要关闭,以便用户不能再使用它,直到下载新版本。问题是,在点击确定后,登录表单仍然显示。下面是该类的代码:

 DialogResult dialog = MessageBox.Show("FleetTrack™ update required.\n\nA new version of FleetTrack™ is available on your Driver Hub. You must download"
        + " the latest update to use FleetTrack™.", "FleetTrack™ Update Required", MessageBoxButtons.OK);
        if (dialog == DialogResult.OK)
        {


            Application.ExitThread();
        }

我不太确定我需要做什么。如果运行的版本与数据库中显示的版本不同,该应用程序会成功显示弹出窗口,但是单击“确定”后,它只会像往常一样加载登录表单。


这段代码在哪个模块中?请展示整个启动代码。 - Mark Hall
为什么不直接在登录窗体上调用 Close() 方法呢? - Rowland Shaw
2
很有可能你还没有调用Application.Run()。所以现在还没有什么可以退出的。使用调试器,设置断点。Environment.Exit()总是有效的。 - Hans Passant
刚刚稍微修改了一下代码。我想你是对的 @HansPassant。现在在 Main 函数中出现了异常,以下代码被标记:Application.Run(new Login()); - Justin
1个回答

7

请使用Application.Exit()而不是Application.ExitThread()

如果在运行Application.Run()之前显示对话框,则需要确保在需要版本更新时不调用Application.Run()。

if (updateRequired)
{
    DialogResult dialog = MessageBox.Show("FleetTrack™ update required.\n\nA new version of FleetTrack™ is available on your Driver Hub. You must download"
+ " the latest update to use FleetTrack™.", "FleetTrack™ Update Required", MessageBoxButtons.OK);
    if (dialog == DialogResult.OK)
    {
        Application.Exit();
    }
} else 
    Application.Run(new Login());

updateRequired 是一个布尔值,用于检查是否需要进行应用程序更新。


在表单中的 Application.Exit(); 行之前添加 await Task.Delay(100);,这样做有什么问题吗?我尝试了这个简单的修复方法,现在程序可以正常关闭了。它给了一点时间让 Application.Run 代码工作,然后才能关闭程序。这种方式有什么问题吗? - Justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接