请求的剪贴板操作没有成功

Kri*_*ril 15 clipboard winforms

Exception Type: ExternalException

Message: Requested Clipboard operation did not succeed.

Method: ThrowIfFailed

Source: System.Windows.Forms



Stack Trace:

   at System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
   at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)
   at System.Windows.Forms.Clipboard.SetText(String text, TextDataFormat format)
   at System.Windows.Forms.Clipboard.SetText(String text)
   at Deerfield.Base.Controls.DataGridView.ProcessCmdKey(Message& msg, Keys keyData) in C:\Users\Developer\Desktop\deerfield\src\core\Deerfield\Deerfield.Base\Controls\DataGridView.cs:line 555
   at System.Windows.Forms.Control.ProcessCmdKey(Message& msg, Keys keyData)
   at System.Windows.Forms.Control.ProcessCmdKey(Message& msg, Keys keyData)
   at System.Windows.Forms.TextBoxBase.ProcessCmdKey(Message& msg, Keys keyData)
   at System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了这个,但我无法得到一个正确的答案,为什么会发生这种情况.

MSDN文档说,这通常发生在用户切换到另一个应用程序时,但似乎并非如此.

Wir*_*Guy 8

有类似的问题.找到这个条目,基本上说retryTimes在通话中设置为2:

Clipboard.SetDataObject(object data, bool copy, int retryTimes, int retryDelay)
Run Code Online (Sandbox Code Playgroud)

去试试吧.如果有人能发布可重现的测试用例,那将会很好.

  • @KristenApril:如果您查看 SetText 方法是如何实现的(使用 Reflector 或类似的东西),它只是包装了对 SetDataObject 的调用。它首先将文本包装在 DataObject 类中,然后将其传递到 SetDataObject 中,尽管调用 SetDataObject 会自动为您执行此操作,因此您真的只想使用它内部用于调用 SetText 的相同选项,即:'SetDataObject(data , 真, 10, 100);' (2认同)

小智 6

简单!我遇到了同样的问题并修复了它。

只需打开任务管理器,在rdpclip.exe下搜索Processes,将其杀死。然后,打开一个新任务并再次运行它。


Chr*_*ton 6

根本原因可能是您正在进行两项操作,通常是复制和粘贴,并假设剪贴板可用.当你尝试粘贴时,会发生一个副本(更新剪贴板)然后其他剪贴板查看器对它做出反应.防御是在粘贴操作周围有一个except/sleep/retry机制,这样你就可以优雅地处理它.告诉用户关闭rpdclip等,不会在生产应用程序中飞行.还要确保你没有(ab)使用剪贴板作为拐杖.提供剪贴板是为了方便用户,而不是PROGRAMMER.

  • 同意,但是在进行 VBA / Office 编程时,来回获取数据的好方法并不多,而且系统实际上是将剪贴板作为主要传输工具来设计的。 (2认同)