据我了解,未完成并返回错误代码为0的应用程序未正确终止。但是,无论如何,我制作的任何UWP App(甚至是非常默认的App)每次都以错误代码1结束。而且,它的主类的Dispose()和析构函数从不被调用。这是预期的行为吗?

为了重现,我只是制作了默认的UWP应用:

  • 右键单击解决方案->添加->新项目...
  • 然后在其他语言下-> Visual C#-> Windows Universal->“空白应用程序(通用Windows)”
  • 然后构建和部署应用程序。

  • 如果您现在运行然后关闭应用程序,则似乎是强制退出。我得到的最后一个输出是:
    The thread 0x35a4 has exited with code 0 (0x0).
    The thread 0x34f4 has exited with code 1 (0x1).
    The program '[3376] App1.exe' has exited with code 1 (0x1).
    

    因此,我认为这意味着线程失败,然后应用程序失败。这是正确的,并且是不好的吗?

    此外,我在主App.xaml.cs中添加了以下代码:
        ~App()
        {
            System.Diagnostics.Debug.WriteLine("Calling destructor");
        }
    
        // (Implement Disposable interface)
        public void Dispose()
        {
            System.Diagnostics.Debug.WriteLine("Calling dispose");
        }
    

    都没有被调用过。这是怎么回事?

    最佳答案

    我建议您玩UWP lifecycles和事件。据我所知,当用户关闭该应用程序时,它会进入暂停模式,然后终止。
    UWP应用程序的生命周期经历了一系列步骤,其中,甚至进入并在启动时离开背景,或者暂停
    App.Xaml.Cs 中,您可以继续进行事件的任何处理,并了解应用程序生命周期的工作方式。

    关于c# - UWP App总是以非零返回码退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55187350/

    10-16 12:00