wpf 当我不知道异常可能在哪里抛出时,如何记录异常?

okxuctiv  于 2023-02-13  发布在  其他
关注(0)|答案(2)|浏览(180)

我们有一个WPF应用程序,我们已经部署到客户。但是,应用程序随机致命崩溃与一个“意外错误”对话框上的客户的计算机。我们需要能够看到异常消息,最好是堆栈跟踪,但因为它是随机崩溃,我们不知道我们应该把try/catch检查放在哪里,这样我们才能记录它。我们使用NLog来记录。我的问题是,我们有没有办法配置NLog来捕获代码没有处理的所有异常,或者有没有其他方法来实现这一点?

kmynzznz

kmynzznz1#

为什么不放置一个全局try/catch块来覆盖整个代码呢?
由于它是WPF应用程序,因此可能需要进行一些更改。不要让WPF自动打开主窗口,而是删除App.xaml文件,然后从应用程序起始点(在try/catch内)通过代码打开窗口。
请注意,这不是一个好的实践(就像捕获所有异常通常是不好的),但可能是一个临时的解决方案,以找到崩溃发生的位置。
编辑:我还邀请你阅读一个关于WPF中全局try/catch块的相关问题的答案,其中有一些有用的东西我在写答案的时候不知道。

cgh8pdjw

cgh8pdjw2#

<Application x:Class="WpfTutorialSamples.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         DispatcherUnhandledException="Application_DispatcherUnhandledException"
         StartupUri="WPF Application/ExceptionHandlingSample.xaml">
<Application.Resources>
</Application.Resources>

向App.xaml文件添加代码,然后向App.xaml.cs添加代码

using System;
using System.Windows;

namespace WpfTutorialSamples
{
public partial class App : Application
{
    private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
    {
        MessageBox.Show("An unhandled exception just occurred: " + e.Exception.Message, "Exception Sample", MessageBoxButton.OK, MessageBoxImage.Error);
        e.Handled = true;
    }
}}

有关详细信息,请阅读Handling exceptions in WPF文章

相关问题