piątek, 1 czerwca 2012

Requested Clipboard operation did not succeed. Jak temu zapobiec?

Zdarza się, że podczas wpisywania danych do schowka za pomocą klasy Clipboard otrzymamy wyjątek "Requested Clipboard operation did not succeed." 




Requested Clipboard operation did not succeed.
System.Runtime.InteropServices.ExternalException
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)
Może to być spowodowane tym, że schowek nie został wyczyszczony przed zapisaniem danych lub tekstu. Niestety wcześniejsze opróżnienie schowka poleceniem
Clipboard.Clear();
wcale nie gwarantuje nam poprawności działania.

Może też być spowodowane tym, że w tym samym czasie inny proces korzysta ze schowka i blokuje dostęp innych programów.

Jednak czasem występowanie tego błędu jest tak częste (szczególnie na komputerach z systemem Windows Vista), że równie dobrze może zależeć od ciśnienia atmosferycznego lub temperatury.

Rozwiązanie problemu jest proste (niestety funkcję SetText trzeba zastąpić funkcją SetDataObject) należy użyć parametrów retryTimes i retryDelay.

int retryTimes = 5;
int retryDelay = 2;
Clipboard.SetDataObject(yourObject, false, retryTimes,retryDelay);

Z mojego doświadczenia wynika, że problem odchodzi do krainy Wiecznych Łowów i więcej nam nie wchodzi w drogę.

Brak komentarzy:

Prześlij komentarz