鲸鱼软件开发 2018-12-24 11:50 采纳率: 0%
浏览 1204

在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条回答 默认 最新

  • 蒋晟 2018-12-29 18:20
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题