c#在try / catch块中未捕获异常

本文关键字:捕获异常 catch try | 更新日期: 2023-09-27 18:03:54

考虑一个内部使用加密函数的WPF应用程序:

using System;
using System.Security.Cryptography;
using System.Windows;
namespace CryptoExceptionHandling {
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
            try {
                MakeCryptoException();
            } catch (CryptographicException x) {
                MessageBox.Show(x.Message);
            }
        }
        private void MakeCryptoException() {
            using (var csp = new RSACryptoServiceProvider(1024, new CspParameters { ProviderType = 1 })) {
                var data = new byte[128];
                new Random().NextBytes(data);
                csp.Decrypt(data, false);
            };
        }
    }
}

我希望这个程序显示一个包含异常的消息框。该程序模拟了一个情况,当提供给我的应用程序的一些数据被证明无效时。

我不希望应用程序在这里崩溃,我希望应用程序做一些更有意义的事情,如显示"拒绝访问"或"无效数据"屏幕。

如何捕获异常?您可以通过创建一个空的WPF应用程序并将下面的代码粘贴为MainWindow.cs内容来轻松地重新创建这个案例。

我删除了这个问题前面的内容,因为从注释中可以看出,它缺少一个有效的例子。

c#在try / catch块中未捕获异常

解决方案:

进入"调试"菜单,"选项"子菜单,取消勾选"当异常跨越AppDomain或managed/native边界时中断"选项。

我之前调试了一些混合/不安全的代码,完成后忘记取消勾选。