在WPF中操作剪切板一直出现各种各样的错误

我在程序中定义了一个timer来循环获取剪切板的内容

 private void timer_listen_Tick(object sender, EventArgs e)
        {
            if (System.Windows.Clipboard.ContainsText())
            {
                System.Windows.IDataObject obj = System.Windows.Clipboard.GetDataObject();
                if (obj != null)
                {
                    string text = obj.GetData(System.Windows.DataFormats.Text).ToString();
                }
            }
        }

然后会出现莫名其妙的错误2个
1.
托管调试助手“DisconnectedContext”在“...........................”中检测到问题。

其他信息: 针对此 RuntimeCallableWrapper 向 COM 上下文 0x308e1f88 的转换失败,错误如下: 对象没有连接到服务器 (异常来自 HRESULT:0x800401FD (CO_E_OBJNOTCONNECTED))。原因通常是创建此 RuntimeCallableWrapper 的 COM 上下文 0x308e1f88 已断开连接,或者该上下文正忙于执行其他操作,无法处理该上下文转换。将不会有代理服务于该 COM 组件上的请求,调用将直接转向该 COM 组件。这可能会导致损坏或数据丢失。要避免此问题,请确保在应用程序全部完成 RuntimeCallableWrapper (表示其内部的 COM 组件)之前,所有 COM 上下文/单元/线程都保持活动状态并可用于上下文转换。

2.
“System.Runtime.InteropServices.COMException”类型的未经处理的异常在 PresentationCore.dll 中发生

其他信息: OpenClipboard 失败 (异常来自 HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN))

1个回答

CLIPBRD_E_CANT_OPEN是你必须处理的异常,你不抓这个异常就会出现这个未经处理的异常的问题。
剪贴板是全局对象,但是同一时间只有一个程序有访问权,别的程序不管是为了什么原因打开了剪贴板(比如远程桌面经常打开剪贴板去同步本机和远程的剪贴板内容),你就打不开。
这个设计上就是会有访问冲突的,你要么等一段时间再去读,要么报错。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!