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)
我用Google搜索了这个,但我无法得到一个正确的答案,为什么会发生这种情况。
MSDN文档说这种情况经常发生在用户切换到另一个应用程序时,但似乎并非如此。
答案 0 :(得分:7)
有类似的问题。找到了这个entry,
这基本上就是说在呼叫中将retryTimes
设置为2:
Clipboard.SetDataObject(object data, bool copy, int retryTimes, int retryDelay)
去尝试一下。如果有人能发布一个可重复的测试用例,那就太好了。
答案 1 :(得分:6)
根本原因可能是您正在进行两项操作,通常是复制和粘贴,并假设剪贴板可用。当你尝试粘贴时,会发生一个副本(更新剪贴板)然后其他剪贴板查看器对它做出反应。防御是在粘贴操作周围有一个except / sleep / retry机制,这样你就可以优雅地处理它。告诉用户关闭rpdclip等,不会在生产应用程序中飞行。 还要确保你没有(ab)使用剪贴板作为拐杖。提供剪贴板是为了方便用户而不是PROGRAMMER。
答案 2 :(得分:4)
EASY!我遇到了同样的问题并修复了它。
只需打开任务管理器,在rdpclip.exe
下搜索Processes
,然后将其删除即可。然后,打开一个新任务并再次运行它。
答案 3 :(得分:4)
我在应用中遇到了这个问题,但只有在HP mini上运行时才会出现这个问题。
如果我有C#express运行,那么我可以检查异常,
关闭Google Chrome可以解决问题。
重新开启Google Chrome会使其重新出现。
但在我的64位主机上,没问题;在我之前的32位机器上,也没问题。有限RAM的副作用可能是什么?
杰拉德
答案 4 :(得分:2)
现在其他一些应用程序正在使用剪贴板。找出应用程序监控剪贴板并终止该过程。适合我。
答案 5 :(得分:1)
我也遇到了这个问题,并以WireGuy的答案使用此代码。但是此代码在我的PC中出现了“请求的剪贴板操作未成功”的异常。我在这一行中输入了try Catch语句
try
{
Clipboard.SetDataObject(textBoxCodePan.Text, true, 10, 100);
}
catch (Exception)
{
}
并且工作正常。
答案 6 :(得分:1)
尝试使用try catch在while循环中运行GetDataObject。最终它将成功。
while (tempObj == null)
{// get from the clipboard
try
{
tempObj = Clipboard.GetDataObject();
}
catch (Exception excep)
{
}
}
答案 7 :(得分:0)
我使用了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);
}
答案 8 :(得分:0)
对于我自己,我发现剪贴板仍在处理我的请求
正在推出一个新的。
SendKeys.SendWait("^c");
Clipboard.GetText();
所以我添加了Sleep,它现在效果很好。
SendKeys.SendWait("^c");
Thread.Sleep(250);
Clipboard.GetText();
答案 9 :(得分:0)
如果您使用某些VNC程序(RealVNC),并且您的应用程序使用主线程“请求的剪贴板操作失败”中System.Windows.Forms.dll中的剪贴板,则会发生。这是我为.NET 3.5用C#编写的解决方案:
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);
}
答案 10 :(得分:0)
由于某种原因,每次运行时都会出现“请求的剪贴板操作未成功”异常
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调用上都会失败
我确定这是暂时性错误,因为前几天我设置剪贴板内容没有问题。
答案 11 :(得分:0)
从Microsoft SQL Server Management Studio复制数据时,突然出现此错误,因为那时我什么也无法复制。 重新启动explorer.exe进程即可解决此问题。我猜想资源管理器进程可以处理大多数剪贴板操作。