Запрошенная операция с буфером обмена завершилась неудачно - PullRequest
3 голосов
/ 05 августа 2010

Я использую vb.net 2003, и иногда эта ошибка возникает. Кто-нибудь может знать, как возникает эта ошибка и как ее исправить?

Ошибка: запрошенная операция с буфером обмена завершилась неудачей

Ответы [ 3 ]

5 голосов
/ 05 августа 2010

Я погуглил этот вопрос, чтобы посмотреть, что я увижу, и многие люди задавали этот вопрос, и никто из них не получил четкого ответа ...

Итак, я перешел к документации MSDN и обнаружил примечание, объясняющее, что описывают большинство людей, задавших этот вопрос ... Симптом обычно появляется, когда пользователь переключается на другое приложение во время выполнения кода. Примечание цитируется ниже со ссылкой на следующую документацию:

общий доступ ко всем приложениям для Windows буфер обмена системы, поэтому содержимое могут быть изменены при переключении в другое приложение.

Объект должен быть сериализуем для него быть помещенным в Буфер обмена. если ты передать несериализуемый объект Метод буфера обмена, метод потерпит неудачу без исключения. Увидеть System.Runtime.Serialization для более информация о сериализации. Если твой целевое приложение требует очень конкретный формат данных, заголовки добавлено к данным в сериализации процесс может помешать применению от распознавания ваших данных. к сохраните свой формат данных, добавьте свой данные в виде байтового массива в MemoryStream и передать MemoryStream в Метод SetData.

Класс Clipboard может использоваться только в темах, установленных в один поток квартира (STA) режим. Чтобы использовать это класс, убедитесь, что ваш метод Main помечены атрибутом STAThreadAttribute атрибут.

Особые соображения могут быть необходимо при использовании метафайла формат с помощью буфера обмена. Из-за ограничение в течении реализация DataObject класс, формат метафайла, используемый .NET Framework может не распознаваться приложениями, которые используют более старые формат метафайла. В этом случае вы должен взаимодействовать с Win32 Разработка приложений буфера обмена интерфейсы (API). Для большего информация, см. статью 323530, «Метафайлов в буфере обмена нет Доступно для всех приложений "в База знаний Microsoft по адресу http://support.microsoft.com.

http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx

Как ни странно, в этом есть смысл странного поведения, которое я заметил в одном из моих собственных приложений. У меня есть приложение, которое пишет в электронную таблицу Excel (на самом деле, для сотен из них, изменяя сотни ячеек каждая). Я вообще не использую буфер обмена, только Interop API для Excel, но когда он работает, мой буфер обмена очищается каждый раз, когда создается новая электронная таблица. В моем случае Excel работает с буфером обмена, даже если для этого нет видимых причин. Я бы отнес это к одному из тех загадочных явлений Windows, которые мы, смертные, никогда не поймем.

В любом случае, благодаря вашему вопросу, я понимаю, что понимаю мою проблему, поэтому +1 вам за помощь.

1 голос
/ 26 июля 2011

У меня ошибка при попытке:

Clipboard.Clear();
...
Clipboard.SetText(...);

Для ее решения я заменяю Clipboard.Clear() на определение некоторых методов из user32.dll:

[DllImport("user32.dll")]
static extern IntPtr GetOpenClipboardWindow();

[DllImport("user32.dll")]
private static extern bool OpenClipboard(IntPtr hWndNewOwner);

[DllImport("user32.dll")]
static extern bool EmptyClipboard();

[DllImport("user32.dll", SetLastError=true)]
static extern bool CloseClipboard();

...

IntPtr handleWnd = GetOpenClipboardWindow();
OpenClipboard(handleWnd);
EmptyClipboard();
CloseClipboard();

...

Clipboard.SetText(...);

Я использую C # здесь, но VB-версия может быть легко создана из него.

0 голосов
/ 02 сентября 2010

Есть ли шанс, что UltraVNC работает.У меня есть проблемы, когда это приложение работает в фоновом режиме на стороне клиентского ПК.Когда я закрываю VNC, я могу успешно скопировать в буфер обмена.Это не совсем удовлетворительное решение, но, по крайней мере, я знаю в моем случае источник проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...