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

时间: 2024-11-09 02:05:11

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

C#操作剪切板(Clipboard)

剪切板是Windows系统提供的功能,从我最早接触到的Windows 3.2版本开始,就一直带着了.以前使用C++的时候,是直接使用Windows API对其进行操作的,到了.NET下,在WinForm中也有一个对剪切板的封装类,即System.Windows.Forms.Clipboard,这个类其实是通过COM组件间接地使用剪切板的,我个人觉得COM是一个设计非常糟糕的东西,难懂坑多还不可移植,但微软现存的大量代码又是基于COM的,所以又无法彻底舍弃,关于不可移植这个并不难理解,前面说了,剪

在Java中调用与系统有关的剪切板Clipboard

java从1.5版开始已经能与系统的剪切板很好的交互了. 如果可以在程序中直接调用系统的剪切板来保存“复制”的对象内容,那可以说的比之前的想法好很多. 下面是一个对java.io.File对象进行copy,paste操作的例子,虽然还不完善,但可以在程序中很好的使用. /* * 定义为传输操作提供数据所使用的类的接口 * 专用于java.io.File类型 */ package angel.datatransfer; import java.awt.datatransfer.*; import

C# 使用WinApi操作剪切板Clipboard

前言: 最近正好写一个程序,需要操作剪切板 功能很简单,只需要从剪切板内读取字符串,然后清空剪切板,然后再把字符串导入剪切板 我想当然的使用我最拿手的C#来完成这项工作,原因无他,因为.Net框架封装了能实现这种功能的方法 然后就有了如下代码 1 string Temp = ""; 2 while (true) 3 { 4 string Tex = Clipboard.GetText().ToString(); 5 if (!string.IsNullOrWhiteSpace(Tex)

visual studio 2013运行时卡顿 CPU占用超50%的解决方法

如果你许久未使用vs,再次新建一个工程时,有可能会遇到这种情况,鼠标点击.滚轮滑动都一卡一卡的,打开任务管理器一看,一个vs,内存占用几十M,CPU占用却几乎达到50%(我的是57%)!!!编写代码各种卡顿,完全不能忍... 解决方法:有可能是vs的一些内部文件丢失,根据vs的提示.我在编写c++时遇到这个问题,于是去找安装镜像,解压出了SSCE40这个文件夹,里面有两个文件,如图: SSCERuntime_x64-chs.exe和SSCERuntime_x86-CHS.exe这两个文件,由于我

80端口被占用时的终极解决方法

[摘要] 之前在某次安全测试时,遇到一个80端口被占用的坑,将解决方法共享出来. 使用netstat -ano 命令查看是哪个进程正在占用80端口 之前在某次安全测试时,遇到一个80端口被占用的坑,将解决方法共享出来 使netstat -ano 命令查看是哪个进程正在占用80端口 PID为4的进程正在占用80端口.此进程为system进程,无法直接结束进程 使用netsh命令查看http端口使用状态 netsh http show servicetstate 这里可以看到有两个进程正在使用htt

C# Winform应用程序占用内存较大解决方法整理(转)

原文:http://www.jb51.net/article/56682.htm 背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其是 winform 程序,其主要原因是因为.NET程序在启动时,是需要由JIT动态编译并加载的,这个加载会把所有需要的资源都加载进来,很多资源是只有启动时才用的. 以XP 系统为例子,程序启动后,打开任务管理器,

SQL Server 2008 R2占用内存越来越大解决方法

最近开发sql server数据库项目的过程中发现了这么一个问题,后台网站内存占用95%,通过任务管理器查看占内存的进程sqlserver.exe,是因为SQL Server 2008 R2运行越久,占用内存会越来越大. 因为sql server 2008 本身内存回收机制做的不好 所以只能这么强制设置.现在明白了,原来是微软R2系列的服务器&数据库问题的通病. 方法: 进入Sql server 企业管理器,在数据库服务器名称上点击[右键],选择[属性],然后,找到[内存]选项,在右边的[使用A

/dev/mapper/vg_zjxtest-lv_root 占用到达100%的解决方法

磁盘满了看看 1  查看这个目录 du -sh ~/.local/share/Trash 看看是否是回收站满了 2 查看/tmp目录和/var目录是否有大文件 3 看看这个目录加下面的文件是否很大 /var/lib/mlocate/ 删除mlocate.db文件 修改/etc/updatedb.conf 在PRUNEPATHS 参数后面增加不需要进行locate的目录,修改完成后执行 执行这个命令: updatedb mlocate.db 会明显减少.

SECOH-QAD.exe占用CPU太高解决方法

某些的僵尸文件.整个删除注册表HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\IMAGE FILE EXECUTION OPTIONS\SPPEXTCOMOBJ.EXE重启系统 再删除僵尸文件.文件存在 C:\Windows 下面找到 SECOH-QAD.exe SECOH-QAD.dll 删除这俩个文件 激活后不需要这文件. 原文地址:http://blog.51cto.com/11728495/2349367