最近在维护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:以上只是个人的看法,有不当之处,烦请指正。谢谢!)

WPF复制异常问题(OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)))的更多相关文章

  1. WPF .NET 4.0 OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN)) BUG解决

    在项目 App.xaml 文件下  => Application 节点=> 添加  DispatcherUnhandledException="Application_Dispa ...

  2. WPF剪切板问题-OpenClipboard HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN))

    WPF剪切板问题-OpenClipboard HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN))       最近碰到一个问题,需要弄个小工具来解决.刚好接触到WPF, ...

  3. 检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。

    检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRE ...

  4. 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码。 (异常来自 HRESULT:0x8000401A)。

    检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确,系统无法开 ...

  5. Word 远程调用失败:异常来自 HRESULT:0x800706BE

    之前服务器上一直运行正常的,这几天突然报错 “远程过程调用失败. (异常来自 HRESULT:0x800706BE) ” 解决方案:组件服务—我的电脑—属性—COM安全—编辑默认值  添加各种用户权限 ...

  6. 2019-11-29-WPF-如何在绑定失败异常

    原文:2019-11-29-WPF-如何在绑定失败异常 title author date CreateTime categories WPF 如何在绑定失败异常 lindexi 2019-11-29 ...

  7. 2018-8-10-WPF-如何在绑定失败异常

    title author date CreateTime categories WPF 如何在绑定失败异常 lindexi 2018-08-10 19:16:53 +0800 2018-05-17 1 ...

  8. 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

    两种原因: 第一种为程序的运行以平台系统位数不匹配,第二种则是该死的VS整出来的... 一般在下面三种情景下会发生. 1.64位系统上C#调用32位的C++ *.dll 2.64位系统上IIS发布含有 ...

  9. 原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))

    场景: 客户端初始化正常,到IIS服务就报80040154. System.Web.Services.Protocols.SoapException: System.Web.Services.Prot ...

随机推荐

  1. IDEA如何刷新pom文件

    被新手问到了“IDEA如何刷新pom文件?”这个问题,想来这是一个不好意思问的常犯的错误吧. 在IDEA中,修改了pom.xml文件,添加了依赖以后,一般会弹出以下这个警告来. 点击[Import C ...

  2. Web.config中设置启用webservice远程调试访问 参数看不到

    <system.web><compilation debug="true" /> <!--begin启用webservice远程访问--> &l ...

  3. MT【73】求函数表达式

    评:由关系式求表达式最经典的莫过于已知$f(x+y)=f(x)f(y)$利用柯西法求得 $f(x)=[f(1)]^x$

  4. 自学Zabbix3.12-动作Action

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix3.12-动作Action介绍 1. 动作action 在配置好监控项和触发器之后 ...

  5. Java -- JDBC 学习--数据库连接池

    JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...

  6. 中南大学2018年ACM暑期集训前期训练题集(入门题) X: 又一道简单题

    简直智障,上一题V题,样例输出里面的“Case:”不要输出,到了这题又是要输出的了 #include<iostream> using namespace std; int num[1000 ...

  7. spring 项目分开发和生产环境

    1.pom 文件修改 <profile> <!-- 本地开发环境 --> <id>dev</id> <properties> <pro ...

  8. Docker跨主机网络解决方案

    前言:前面的部分一直都是单机跑docker,但实际生产环境不可能只用一台来跑.肯定会用到多台,因为他们都是内部私有ip,那么多台主机之间的容器如何通信?这个是个很头疼的问题!目前主流几种方法如下:1. ...

  9. GUI程序开发的流程(随时删除的源码)

    1.继承JFrame 2.定义需要的组件 3.创建组件 4.设置布局管理器 5.添加组件 6.显示窗体 --------------------------------------------- 小代 ...

  10. pandas简短介绍

    1.数据结构 维数 名称 描述 1 Series 一维带标签单一数据类型的数组 2 DataFrame 不同数据类型的列 2.十分钟学习pandas 2.1.导入所需模块 import pandas ...