有时,在不可重现的情况下,我的WPF应用程序崩溃而没有任何消息.应用程序立即关闭.
实现全局Try/Catch块的最佳位置在哪里.至少我必须实现一个消息框:"抱歉给您带来不便......"
非常好奇,但只是想知道是否有人知道使用之间的区别:
System.Windows.Forms.SaveFileDialog(在Assembly System.Windows.Forms.dll中)和Microsoft.Win32.SaveFileDialog(在Assembly PresentationFramework.dll中)?
我在WPF表单中使用PresentationFramework.dll版本,但我目前正在重新使用表单中的一些旧代码,其中包括显示System.Windows.Forms.dll版本并想知道是否:
提前致谢.
使用Window类中的ShowDialog方法显示WPF窗口对话框,就像在主窗口上按下按钮一样,如下所示.
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
var window = new Window1();
window.ShowDialog();
}
catch (ApplicationException ex)
{
MessageBox.Show("I am not shown.");
}
}
Run Code Online (Sandbox Code Playgroud)
该窗口在xaml中订阅了一个Loaded事件,如下所示:
<Window x:Class="Stackoverflow.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Loaded="Window_Loaded">
<Grid />
</Window>
Run Code Online (Sandbox Code Playgroud)
Window_Loaded事件中抛出异常
private void Window_Loaded(object sender, RoutedEventArgs e)
{
throw new ApplicationException();
}
Run Code Online (Sandbox Code Playgroud)
但是,ShowDialog调用周围没有捕获异常,调用也没有返回.吞下异常并仍然显示窗口.
为什么会发生这种情况?如何处理WPF窗口的Window_Loaded事件中的异常?我是否必须在事件处理程序中捕获它并手动处理窗口?
在WinForms中,您需要打电话 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException)
为了让异常通过ShowDialog调用冒泡.是否需要在WPF上设置类似的开关?
我在调试调用另一个AppDomain的应用程序时遇到问题,因为如果在其他AppDomain正在执行的任何操作中发生异常,则异常会冒泡并导致Visual Studio 2010无论如何都会中断.
我正确地包装了抛出a的方法调用try/catch,并且当我正常运行应用程序(ASP.NET MVC应用程序)时正常捕获异常,但是w3wp.exe在Visual Studio 2010中调试时,它总是在方法上中断调用那个抛出,即使应该被抓住,我也无法通过异常.
我试图装饰外部方法,其中try/catch和throw方法调用完成,[DebuggerStepThrough]但绝对没有效果.执行"继续(F5)","跳过(F10)"或"跳出(F11)"也不执行任何操作; Visual Studio只是暂停了一下,然后在相同的位置再次中断,但具有完全相同的异常.一旦Visual Studio在发生异常的位置停止,似乎绝对没有办法继续前进.
我正在做的就是调用assembly.GetExportedTypes()如果导出的类型引用了一个无法找到的程序集(我想忽略的情况),可能会抛出.抛出的异常是:
FileNotFoundException越过了本机/托管边界
我正在抓住FileNotFoundException,正如我所说的,这在运行应用程序时有效,但在调试时无效.如何让调试器理解我assembly.GetExportedTypes()抛出一个老鼠屁股?
我认为通过取消选中Visual Studio 2010中的选项"在异常时跨越AppDomain或托管/本地边界(仅限托管)"(在"调试">"常规"下)中的选项来解决此问题,但此问题刚刚再次出现.我已经撒了[DebuggerStepThrough],[DebuggerStepperBoundary]并且[DebuggerNonUserCodeAttribute]对所讨论的方法没有任何影响.
在WPF应用程序中,我有一个有计算机的数据库访问任务,由计时器定期运行,此任务已在BackgroundWorker线程中执行.
当连接尝试失败时,我通过try_catch构造引发异常,我想更新UI线程中的状态栏文本.
是否有一些prebuild事件构建BackgroundWorker用于实现这一点,类似DoWorkEventHandler或RunWorkerCompletedEventHandler,可用于此?如果没有,怎么做得更好?
编辑(补充):
如果我想在里面处理异常RunWorkerCompletedEventHandler,使用e.Error参数,它不起作用.如果我在BackgroundWorker线程中未处理异常,应用程序挂起并且调试器指向在BackgroundWorker线程内部执行的代码字符串,说:用户代码未处理异常.
因此,在这种情况下,线程不会停止,发出信号RunWorkerCompletedEventHandler,它会因错误而停止,但整个应用程序停止工作.
我正在搞乱调试选项,现在我所有的例外都是这样的
System.NullReferenceException越过了本机/托管边界.
有时候,当发生异常时,VS要求我打开一些.net .cs文件,好像我有源代码一样.我希望有一些"恢复默认值"按钮.知道我需要切换到什么才能使其正常工作?