请求的剪贴板操作未成功

|
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)
我用谷歌搜索了一下,但是对于为什么会这样,我无法得到一个好的答案。 MSDN文档说,这通常在用户切换到另一个应用程序时发生,但事实并非如此。
已邀请:
有类似的问题。找到了此条目, 基本上说在通话中将
retryTimes
设置为2:
Clipboard.SetDataObject(object data, bool copy, int retryTimes, int retryDelay)
要尝试一下。如果任何人都可以发布可复制的测试用例,那就更好了。
根本原因可能是您正在执行两项操作,通常是复制和粘贴,并假定剪贴板可用。发生的情况是,您进行了复制(以更新剪贴板),然后其他剪贴板查看器在尝试粘贴时对此做出了反应。防御措施是在粘贴操作周围具有“除外/睡眠/重试”机制,以便您可以优雅地处理它。告诉用户关闭rpdclip等,将不会在生产应用程序中运行。 另外,请确保您没有(滥用)剪贴板作为拐杖。提供剪贴板是为了方便用户,而不是为PROGRAMMER。
我在应用程序上遇到了这个问题,但仅在HP mini上运行时才出现。 如果我正在运行C#Express,则可以检查异常, 关闭Google Chrome浏览器可以解决此问题。 重新打开Goog​​le Chrome会使它重新出现。 但是在我的主要64位计算机上,没问题;在我以前的32位计算机上,也没有问题。有限的RAM可能带来副作用? 杰拉尔德
简单!我有同样的问题,并已解决。 只需打开任务管理器,在
Processes
下搜索
rdpclip.exe
,将其杀死即可。然后,打开一个新任务并再次运行。
其他应用程序现在正在使用剪贴板。找出监视剪贴板的应用程序并终止该过程。为我工作。
我也遇到了这个问题,并使用WireGuy回答的代码。但是此代码在我的PC中“请求的剪贴板操作未成功\”成为例外。我在这行中插入了一条Try Catch语句
            try
            {
                Clipboard.SetDataObject(textBoxCodePan.Text, true, 10, 100);
            }
            catch (Exception)
            {

            }
并能正常工作。
我使用了System.Windows.Forms.Control.WndProc方法和PostMessage。
string clipboardText;

{
    clipboardText = \"TEXT FOR CLIPBOARD\";
    PostMessage(Handle, CLIPBOARD_BACKUP_MSG, 0, 0);
}

protected override void WndProc(ref Message m) 
{
    if (m.Msg == CLIPBOARD_BACKUP_MSG)
    {
        Clipboard.SetText(clipboardText);
    }

    base.WndProc(ref m);
}
对我自己来说,我发现剪贴板仍在处理我的请求 正在放一个新的。
SendKeys.SendWait(\"^c\");
Clipboard.GetText();
因此,我添加了睡眠功能,现在效果很好。
SendKeys.SendWait(\"^c\");
Thread.Sleep(250);
Clipboard.GetText();
如果您正在使用某些VNC程序(RealVNC),并且您的应用程序使用主线程“请求的剪贴板操作失败”上的System.Windows.Forms.dll中的Clipboard。这是我用C#编写的.NET 3.5解决方案:
using System.Threading;

   var dataObject = new DataObject();
   private Clipboard()
   {
        //dataObject logic here

        Thread clipboardThread = new Thread(new ThreadStart(GetClipboard));
        clipboardThread.SetApartmentState(ApartmentState.STA);
        clipboardThread.Start();
   }

   private void GetClipboard()
   {
         Clipboard.SetDataObject(dataObject, true, 10, 100);
   }
由于某种原因,每次运行时,都会出现“请求的剪贴板操作未成功”异常
Dim s = \"test\"
Clipboard.SetDataObject(s, True, 10, 200)
Dim s = \"test\"
Clipboard.ContainsText()
Clipboard.SetDataObject(s, True, 10, 200)
每次都工作。 但是,有趣的是
Try
    Dim s = \"test\"
    Clipboard.SetDataObject(s, True, 10, 200)
catch ex as exception
    Dim s = \"test\"
    Clipboard.ContainsText()
    Clipboard.SetDataObject(s, True, 10, 200)
end try
将在两个SetDataObject调用上均失败 我确定它是暂时错误,因为前几天我设置剪贴板内容没有问题。

要回复问题请先登录注册