WPF复制异常问题(OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)))

       最近在维护WPF系统的时候发现的问题,刚刚开始自己的电脑都不能重现,后面写日志跟踪才发现问题的所在。问题主要是由于:1.在程序访问剪切板的时候,有其他程序正在占用剪切板,导致自己的程序无法访问,从而抛出异常;2.没有访问的权限,导致自己的程序无法访问。这个是之前在App.xaml.cs文件中的写法:

        #region
        / <summary>
        / 处理异常的方法
        / </summary>
        / <param name="sender"></param>
        / <param name="e"></param>
        private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            //在wpf中如果复制没有权限此时也会进来这里(PS:以管理员和兼容性运行此程序即可哦)
            if (e.Exception.InnerException.Message.Contains("网络") || e.Exception.InnerException.Message.Contains("超时") || e.Exception.InnerException.Message.Contains("暂停"))
            {
                BugReport report = new BugReport(e.Exception);
                report.Save();
                e.Handled = true;
                report.LaunchBugReport();
                MessageBox.Show(e.Exception.InnerException.Message);
            }
            else
            {
                BugReport report = new BugReport(e.Exception);
                report.Save();
                report.LaunchBugReport();
                e.Handled = true;
                Application.Current.Shutdown();
            }
        }

这个是修改之后的写法:

 在App.xaml文件中添加下面代码中红色的部分
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  StartupUri="MainWindow.xaml"
  DispatcherUnhandledException="Application_DispatcherUnhandledException"

在App.xaml.cs文件中添加代码:

     private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            var comException = e.Exception as System.Runtime.InteropServices.COMException;
            if (comException != null && comException.ErrorCode == -2147221040)
                e.Handled = true;
            BugReport report = new BugReport(e.Exception);
            report.Save();
            e.Handled = true;
        }

这种方法中剪切板动作会自动多次尝试,由于抛出的异常被App中的异常处理给截获了,所以会不断的尝试直到成功。(PS:以上只是个人的看法,有不当之处,烦请指正。谢谢!)


 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
wpf 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)错误通常在C#调用C dll时出现,有几种可能的原因和解决方法。 首先,这个错误可能是由于程序的运行平台系统位数不匹配导致的。比如,如果在64位系统上,C#调用32位的C dll,就会出现这个错误。解决这个问题的方法是,在VS中将生成的目标平台设为X86。具体的操作是,在项目的属性窗口中选择"生成",然后再选择"目标平台",将其设置为"X86"。这样就可以解决这个错误。 其次,这个错误也可能是由于VS设置的问题导致的。如果前面的方法无效,可以尝试打开对应的工程文件(*.csproj),找到<Prefer32Bit>false</Prefer32Bit>节点,将其改为<Prefer32Bit>true</Prefer32Bit>。这样也可以解决这个错误。 最后,如果以上方法都没有解决问题,那可能是因为客户端平台不允许修改。此时,可以选择使用AnyCPU平台,并勾选首选32位选项解决这个问题。 总结来说,当出现wpf 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)错误时,可以尝试以下解决方法:确保C#调用的C dll与运行的平台系统位数匹配,设置生成的目标平台为X86,修改工程文件中的<Prefer32Bit>节点,或选择使用AnyCPU平台并勾选首选32位选项。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C# 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)](https://blog.csdn.net/liangyj66/article/details/70569953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)](https://blog.csdn.net/s_156/article/details/120632575)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网搬砖老肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值