以前在百度写的文档,转移到此处

前几天做一个程序,其中有一个剪切板的操作,具体代码:

       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{}进行条件判断。其次如果在第二次访问剪切板也被且他进程占用依然会出错。所以发布该篇文章用以抛砖引玉,希望读者提供更好的解决方案。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐