我正在编写未处理异常事件的处理程序,我们将把异常转储到文件中,然后发送到服务器进行进一步分析。现在它只会显示崩溃已发生。我订阅了该事件。在该方法中,我调用了一个处理错误的函数。但是,当我在该方法中编写以下代码时:
public async Task HandleException(Exception exception)
{
var dialog = new MessageDialog(exception.Message, "Exception occurred");
await dialog.ShowAsync();
}
当以调试模式运行它时,Visual Studio将显示Visual Studio Just-In-Time调试器。起初我认为问题出在我试图在GUI线程关闭时显示消息框上。我将函数更改为:
public async Task HandleManagedException(Exception
{
await FileStorage.WriteToFileAsync("someFile.txt", exception.ToString());
}
FileStorage.WriteToFileAsync 函数的样子如下:
public async Task WriteToFileAsync(string filename, string data)
{
var file = await this.storageFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, data);
}
在调试模式下,当我在
await FileIO.WriteTextAsync(file,data)
上设置断点时,它会停在那里。按下继续按钮后,与先前代码相同的窗口显示。当从XAML事件调用它时,它可以正常运行。我已经在Google和StackOverflow中搜索了未处理异常处理程序中的异步方法,但没有任何与我的问题相关的内容。我的问题是:这个错误的原因是什么?在未处理异常处理程序中使用异步方法是否可能?
更新: 非常感谢迄今为止提供的答案。第二个问题我自己回答了,在关闭代码调试后,结果证明是可能的,并且该函数按预期工作。