对c#剪切板Clipboard占用的问题一点解决方法

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

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

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

posted @ 2022-03-01 18:15  左正  阅读(400)  评论(0编辑  收藏  举报