wpf 复制到粘贴板_WPF Clipboard剪贴板缺陷解决方案

在WPF应用中遇到OpenClipboard异常0x800401D0,本文介绍了四种解决方案:1)捕获异常并尝试重试;2)使用Clipboard.SetDataObject代替SetText;3)在App.xaml中处理DispatcherUnhandledException;4)借助WinForms的Clipboard类。通过这些方法,可以避免WPF剪贴板操作的问题。
摘要由CSDN通过智能技术生成

异常信息“OpenClipboard HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN

WPF本身对Clipboard处理的问题,在.Net4.0及之前的版本中都有问题,在.Net4.5中修复了,但XP下安装不了.NET4.5,而我的程序又必须在XP下运行。

问题主要是由于:在程序访问剪切板的时候,有其他程序正在占用剪切板,导致自己的程序无法访问,从而抛出异常。

自行截获异常,进行处理

for (int i = 0; i < 10; i++)

{

try

{

Clipboard.SetText(lineTexts[lineIndex]);

break;

}

catch

{

System.Threading.Thread.Sleep(10);//这句加不加都没关系

}

}

这种方法处理过程中UI会有一小段时间的假死。。。可以考虑多线程?

2. 换一种方式设置剪切板

Clipboard.SetDataObject(lineTexts[lineIndex]);

就这一句。。。这种方法不会抛异常,UI也没有假死,非常正常!估计SetDataObject方法跟SetText方法的实现不一样,没有细究。。。

3. 跟方法1类似,不过有点高级

剪切板处理的那句代码不变,还是使用SetText方法。

在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文件中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值