我正在使用 MonoMac 为 OSX 开发一个简单的应用程序。当我的应用程序遇到未处理的异常时,我会通过以下方式捕获它们:
AppDomain.CurrentDomain.UnhandledException += (sender, e) => Unhandled(e.ExceptionObject as Exception);
在函数 Unhandled() 中,我记录异常并运行模式窗口以通知用户出现问题。
然后我通过在应用程序的某个地方抛出一个常规异常来继续测试它。崩溃报告窗口按原样出现,并记录错误。
但是在关闭此窗口后,我希望应用程序退出,如果我没有发现错误,它会这样做。它不是; 应用程序的主窗口和停靠图标仍然存在,但窗口完全冻结。
如果我删除上面的代码行,应用程序在崩溃时会完全关闭。
我尝试通过调用强制应用程序退出:
NSApplication.SharedApplication.Terminate(myAppDelegate);
但这似乎根本没有任何作用。我在应用程序的退出按钮中使用了完全相同的代码行,并且它按预期工作,因此在捕获未处理的异常后,应用程序状态必须有一些特别之处。但是什么?
为了以防万一,我在 AppDelegate 中覆盖了以下内容,但这似乎没有任何区别:
public override NSApplicationTerminateReply ApplicationShouldTerminate (NSApplication sender)
{
return NSApplicationTerminateReply.Now;
}
我认为显示模态表单可能会对应用程序状态产生影响,但经过测试,我发现是否显示模态表单没有任何区别。仍然是冻结的主窗口而不是关闭。
编辑:测试时我一定做错了什么。如果我不显示错误表单,它实际上可以正常工作。
有任何想法吗?