以前在百度写的文档,转移到此处
前几天做一个程序,其中有一个剪切板的操作,具体代码:
Clipboard.SetText(“ABC”);
来完成一个复制字符串的操作。
自己调试通过,完全正常,然后就交给一位朋友做测试。但是他告诉我这个复制操作总是引起崩溃。并弹出“请求剪切板失败”的提示。于是在网上找了一下相关的内容,原来是不同进程之间争用剪切板引起的,剪切板是系统的公用资源,大多数软件都会提供对该区域访问的操作,就以迅雷为例:迅雷有一个监视剪切板的功能,具体实现不清楚,但肯定的是会经常去访问剪切板,如果迅雷正在使用剪切板时自己写的程序也要访问,那么就会产生一个ExternalException的异常,如图
这是我的一点解决方法:
先看代码:
1 try 2 { 3 Clipboard.SetText(“ABC”); 4 } 5 catch (Exception ex) 6 { 7 Application.DoEvents(); 8 Clipboard.SetText(“ABC”); 9 }
即先让进程去访问剪切板,如果产生错误,那么就调用Application.DoEvents();让系统完成现有的操作,然后再次执行对剪切板的操作。使用该方法后,效果明显。在写该文章前未发生上述错误提示。
总结:其实这段代码并不是很好,首先不符合代码规范--不应该使用try{}cath{}进行条件判断。其次如果在第二次访问剪切板也被且他进程占用依然会出错。所以发布该篇文章用以抛砖引玉,希望读者提供更好的解决方案。