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

时间: 2024-12-21 09:49:18

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

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

原文:2019-11-29-WPF-如何在绑定失败异常 title author date CreateTime categories WPF 如何在绑定失败异常 lindexi 2019-11-29 10:13:57 +0800 2018-05-17 14:29:32 +0800 WPF 调试 WPF调试 在开发 WPF 程序,虽然 xaml 很好用,但是经常会出现小伙伴把绑定写错了.因为默认的 VisualStudio 是没有自动提示,这时很容易复制粘贴写出一个不存在的属性. 在 xaml

【解决】该任务映像已损坏或已篡改。(异常来自HRESULT:0x80041321)

把系统升级到Windows 10,体验了一番Windows 10.感觉不怎么好用退回到了Windows 7,发现我原来自定义的任务计划没有按时执行,于是打开任务计划,弹出了下面的对话框[该任务映像已损坏或已篡改.(异常来自HRESULT:0x80041321)]. 解决办法: 1. 以管理员身份运行命令提示符并执行命令chcp 437schtasks /query /v | find /i "ERROR: Task cannot be loaded:" 2. 该命令将返回损坏的任务计划

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

场景: 客户端初始化正常,到IIS服务就报80040154. System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: 服 务器无法处理请求. ---> System.Runtime.InteropServices.COMException: 检索 COM 类工 厂中 CLSID 为 {AD270EF3-E9EF-4928-BA2A-53205B9B5211} 的组件失败,原

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

两种原因: 第一种为程序的运行以平台系统位数不匹配,第二种则是该死的VS整出来的... 一般在下面三种情景下会发生. 1.64位系统上C#调用32位的C++ *.dll 2.64位系统上IIS发布含有32位的 *.dll应用程序时 3.64位系统上编写C++ *.dll,在64位系统上通过 C#调用 ,可能成功,也可能失败,失败就报BadImageFormatException 异常,也是最二的一种情况.是由该死的VS整出来的 解决方法如下: 1.VS在64位系统下面,编译调试某个C++的API

异常来自 HRESULT:0x800A01A8

Windows 10 Enterprise Microsoft Office 2013 – Excel Oracle BI Publisher Desktop 11.1.1.7 异常来自 HRESULT:0x800A01A8 处理方法: 1.  运行  dcomcnfg.exe 2.  组件服务 –> 计算机 –> 我的电脑 –> DCOM配置

MVC项目,系统找不到指定的文件。(异常来自 HRESULT:0x80070002)

今天在用Visual Studio新建MVC项目的时候,遇到错误 系统找不到指定的文件.(异常来自 HRESULT:0x80070002) 解决办法:工具--> 扩展和更新 -->联机(Visual Studio库)--> NuGet Packget Manager for Visual Studio 2013 , 下载安装后 , 重启VS,OK (NuGet Packget, 还没有好好研究,总体说是方便开发,管理和更新第三方引用)

iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020)

看看IIS的网站,惊人的发现default web site是停止状态.印象中没有停止它啊.右键->管理网站->启动.点击启动后居然弹出:"另一个程序正在使用此文件,进程无法访问.(异常来自HRESULT:0x80070020)"也就是我的default web site 无法启动. 上次一顿搜索,欣喜的发现好文章一篇(http://www.cnblogs.com/rickie/articles/49016.html),描述的情况和我的情况基本一样,参考下, 运行 cmd

解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .

解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 . xlBook.SaveAs(FilePath,Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing

未能加载文件或程序集“Antlr3.Runtime”或它的某一个依赖项。参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))

未能加载文件或程序集“Antlr3.Runtime”或它的某一个依赖项.参数错误. (异常来自 HRESULT:0x80070057 (E_INVALIDARG)) 别的办法都没用,直接删除出问题的dll,再重新引用就好了. 位置:C:\Program Files (x86)\Microsoft Web Tools\Packages\WebGrease.1.1.0\lib