在WPF中,剪切板是一个静态类,设置剪切板很简单。如:将文本添加到剪切板,只需要调用下Clipboard.SetText(Text);就行了。

但是当你在复制的时候,你会发现,它抛出异常了,System.Runtime.InteropServices.COMException:"OpenClipboard失败(异常来自HRESULT:0x800401D0)(CLIPBRD_E_CANT_OPEN))"。 好了,看到这里一脸懵逼,winform都不会啊,这么简单的一句代码。

经过了解发现,原来这个异常是因为设置剪切板的操作还没有执行完,又收到新的设置到剪切板事件操作,于是它就挂给你看了

简单粗暴的解决方法:

        public void CopyToClipboard(string txt)
        {
            try
            {                
                Clipboard.SetText(txt);
                Task.Delay(100).Wait();
            }
            catch (Exception ex)
            {
                L.error(ex.Message);
            }
        }

复制的时候,让他稍微等一等,可以大幅降低崩溃的概率。


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/WPF-%E5%89%AA%E5%88%87%E6%9D%BF%E8%AE%BE%E7%BD%AE%E6%96%87%E6%9C%AC%E6%8A%9B-0x800401D0-%E5%BC%82%E5%B8%B8.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系