【问题标题】:Why doesn't winform open without Application.Run()?为什么没有Application.Run() winform 打不开?
【发布时间】:2014-04-07 07:53:14
【问题描述】:

我试图用下面的代码显示一个winform,但它会打开并立即关闭。 我不明白这是为什么。有什么想法吗?

[STAThread]
    static void Main()
    {
        try
        {
            AppDomain.CurrentDomain.UnhandledException += AllUnhandledExceptions;
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);

            Test testWin = new Test();
            testWin.Show();
        }
        catch (Exception ex)
        {
            Logger.Error("Main : " + ex.Message, typeof(Program));
        }
    }

如果我用 Application.Run(testWin) 替换 testWind.Show() 效果很好。

【问题讨论】:

  • 它“打开”得很好,因为程序在一微秒后终止,所以无法看到它。 Application.Run() 是 GUI 应用程序中的硬性要求,它解决了producer-consumer problem。生产者是操作系统,消费者是你的 UI。你什么都不吃。

标签: c# .net winforms main


【解决方案1】:

您应该改用ShowDialog 方法。

Test testWin = new Test();
testWin.ShowDialog();

【讨论】:

  • 它实际上是在工作,但它是立即打开和关闭
【解决方案2】:

Application.Run 运行消息循环,该循环基本上处理 UI 事件等,直到所有可见窗口都关闭。该方法一直阻塞,直到消息循环关闭。

基本上,您需要运行该消息循环以保持 UI 正常运行 - 而 Show() 只会显示窗口,但不会运行任何类型的消息循环本身,也不会阻塞 - 执行 Main方法完成,应用程序终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多