Запрошенная операция буфера обмена не удалась
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 говорится, что это часто происходит, когда пользователь переключается на другое приложение, но, похоже, это не так.
Ответы
Ответ 1
Аналогичная проблема. Нашли это запись,
который в основном говорит, чтобы установить retryTimes
в 2 в вызове:
Clipboard.SetDataObject(object data, bool copy, int retryTimes, int retryDelay)
Попытка. Было бы неплохо, если бы кто-нибудь мог опубликовать воспроизводимый тестовый пример.
Ответ 2
Коренной причиной может быть то, что вы выполняете две операции, обычно копию и вставку, и предполагаете, что буфер обмена будет доступен. Случается, что вы делаете копию (для обновления буфера обмена), а затем другие зрители буфера обмена реагируют на нее при попытке вставить. Защита состоит в том, чтобы во время операции вставки был задействован механизм сна/сна/повтора, чтобы вы могли обработать его изящно. Говоря пользователю о закрытии rpdclip и т.д., Он не будет летать в производственном приложении.
Также убедитесь, что вы не (ab) используете буфер обмена как костыль. Буфер обмена предоставляется для удобства ПОЛЬЗОВАТЕЛЯ, а не ПРОГРАММА.
Ответ 3
ЛЕГКО! У меня была такая же проблема и исправлено.
Просто откройте диспетчер задач, найдите rdpclip.exe
под Processes
, убейте его. Затем откройте новую задачу и запустите ее снова.
Ответ 4
У меня была эта проблема с приложением, но только при ее запуске на HP mini.
Если у меня запущен С#, я могу проверить исключение,
завершение работы Google Chrome устраняет проблему.
Открытие Google Chrome заставляет его снова появляться.
Но на моей основной 64-битной машине нет проблем; и на моей предыдущей 32-битной машине тоже не проблема. Возможно ли побочный эффект ограниченной ОЗУ?
Геральд
Ответ 5
Теперь какое-то другое приложение использует буфер обмена. Узнайте об отслеживании приложения Clipboard и убейте процесс. Работает для меня.
Ответ 6
У меня тоже была эта проблема, и я использую этот код в ответе WireGuy. но этот код кода делает исключение на моем ПК "Запрошенная операция буфера обмена не удалась". Я поставил в этой строке утверждение Try Catch
try
{
Clipboard.SetDataObject(textBoxCodePan.Text, true, 10, 100);
}
catch (Exception)
{
}
и работал правильно.
Ответ 7
Я использовал метод 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
Для себя я обнаружил, что буфер обмена по-прежнему обрабатывал мой запрос, пока я
ставил новый.
SendKeys.SendWait("^c");
Clipboard.GetText();
Итак, я добавил Sleep, и теперь он отлично работает.
SendKeys.SendWait("^c");
Thread.Sleep(250);
Clipboard.GetText();
Ответ 9
Если вы используете какую-либо программу VNC (RealVNC) и ваше приложение использует буфер обмена из System.Windows.Forms.dll в главном потоке, то "Запрошенная операция буфера обмена завершилась неудачно". Это мое решение, написанное на С# для .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);
}
Ответ 10
По какой-то причине я получаю исключения "Запрошенная операция буфера обмена не выполняется" каждый раз при запуске
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
Я уверен, что это такая же кратковременная ошибка, как когда я настраивал содержимое буфера обмена на днях без проблем.