gpt4 book ai didi

c# - 如何在WPF应用程序中显示错误表单App.xaml.cs

转载 作者:行者123 更新时间:2023-12-03 07:53:46 25 4
gpt4 key购买 nike

我正在开发一个WPF应用程序,其中必须全局处理Exception

为此,我引用了 MSDN 文档。

因此,我在主窗口上的代码是:

private void TestMethod()
{
string s = null;
try
{
s.Trim();
}
catch (Exception ex)
{
MessageBox.Show("A handled exception just occurred: " + ex.Message, "RestartApplication", MessageBoxButton.OK, MessageBoxImage.Warning);
}
s.Trim();
}

在我的 App.xaml.cs
public App() : base()
{
this.Dispatcher.UnhandledException += Application_DispatcherUnhandledException;

}
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.Warning);
e.Handled = true;
}

在这里,我期待两个 MessageBox的异常(exception)。似乎没有调用 Application_DispatcherUnhandledException

但是VS在第二个 s.Trim();上给出了错误

如何处理错误并显示 App.xaml.cs的消息框?

我已经引用了许多SO链接,例如: dispatcherunhandledexception-does-not-seem-to-work
globally-catch-exceptions-in-a-wpf-application

更新:实时应用代码,第二个消息框未显示:
private void ListProcesses()
{
string s = null;

Process[] localByName = Process.GetProcessesByName("notepad++");

DateTime test = new DateTime();
try
{
s.Trim();

foreach (Process p in localByName)
{

this.Dispatcher.Invoke(() =>
{
if (storevalue != p.MainWindowTitle && !String.IsNullOrEmpty(p.MainWindowTitle))
{
aTimer.Stop();

this.Visibility = Visibility.Visible;
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
this.Topmost = true;
this.WindowState = System.Windows.WindowState.Maximized;
this.ResizeMode = System.Windows.ResizeMode.NoResize;
storevalue = p.MainWindowTitle;
}

});
}
}
catch (Exception ex)
{
aTimer.Stop();
MessageBoxResult result = MessageBox.Show("A handled exception just occurred: " + ex.Message, "RestartApplication", MessageBoxButton.OK, MessageBoxImage.Warning);
}

s.Trim();
}

最佳答案

嗯..我想我知道你怎么了。 Dispatcher.UnhandledException事件仅在应用程序运行时起作用,而不是从Visual Studio中运行时。例如,尝试从Debug文件夹中运行它,我想您会看到预期的行为。

当您从Visual Studio运行应用程序时,VS本身正在处理异常,因此它永远不会被处理,因此永远不会触发Dispatcher.UnhandledException事件。

编辑

好的,在研究了您的代码之后,我想您的ListProcesses方法正在Timer中运行。计时器不会将异常传递给调用线程,因此它将永远无法工作。如果您使用System.Timers.Timer,它将默默地吞下异常,如果您使用System.Threading.Timer,则将终止程序。

因此,在这种情况下,您需要自己照顾异常(exception),抱歉:)

关于c# - 如何在WPF应用程序中显示错误表单App.xaml.cs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39850725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com