【问题标题】:Is there a benefit to calling Application.Run in a C# Winforms Application?在 C# Winforms 应用程序中调用 Application.Run 有什么好处吗?
【发布时间】:2015-08-11 01:11:25
【问题描述】:

我正在设计一组顺序模式对话框。以下代码似乎可以正常工作,没有任何问题。通过创建自定义 ApplicationContext 并将其传递给 Application.Run,​​或者将最后一个模式对话框传递给 Application.Run 来代替调用 ShowDialog,我会获得什么? (编辑:显然调用 Application.Run(...) 将取代 Application.Exit())

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Form1 f = new Form1();
        f.ShowDialog(); //Show a modal dialog
        Form1 f2 = new Form1();
        f2.ShowDialog(); //Chain another modal dialog
        Application.Exit();
    }

【问题讨论】:

  • 在您的情况下没有太大区别(因为ShowDialog),但只知道因为您使用的是模态对话框,如果您有多个表单可能会导致问题,例如尝试从模态切换对话框到非模态对话框同时打开。您还面临着应用程序中存在多个 UI 线程的风险。
  • 另外,Application.Exit 应该在消息循环中被调用,它会导致Application.Run 返回。如果您尝试在其中一种表单中使用它,您可能会得到意想不到的结果,因为它内部没有运行 Application.Run

标签: c# .net winforms


【解决方案1】:

不,如果您想以这种方式构建程序,那么调用 Application.Run() 是没有意义的。调用 Application.Exit() 也没有意义,当您的 Main() 方法结束时它已经终止。

Form.ShowDialog() 方法已经在后台调用了 Application.Run()。对话框变为 modal 的基本方式以及为什么您的代码不会立即恢复到 ShowDialog() 之后的下一条语句。就像您改用 Show() 时一样。直到调度程序循环结束,通过关闭表单或设置 DialogResult 属性触发。

通常需要通过检查 ShowDialog() 返回值来测试哪些内容。现在,当第一个窗口出现时,用户没有很好的方法来结束你的应用程序,这可能会让人很困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2012-05-16
    • 2015-01-16
    • 1970-01-01
    • 2011-10-04
    • 2013-02-06
    • 1970-01-01
    相关资源
    最近更新 更多