异常信息“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文件中