В течение последних нескольких часов я отслеживал довольно специфическую ошибку, которая возникает из-за того, что в другом приложении открыт буфер обмена. По сути, поскольку буфер обмена является общим ресурсом (согласно "Почему мой общий буфер обмена не работает?"), и вы пытаетесь выполнить
Clipboard.SetText(string)
or
Clipboard.Clear().
Выдается следующее исключение:
System.Runtime.InteropServices.ExternalException: Requested Clipboard operation did not succeed. 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)
Мое первоначальное решение состояло в том, чтобы повторить попытку после короткой паузы, пока я не понял, что Clipboard.SetDataObject имеет поля для количества раз и продолжительности задержки. Поведение .NET по умолчанию — 10 попыток с задержкой в 100 мс.
Есть еще одна вещь, которую отметил конечный пользователь. То есть, несмотря на выброшенное исключение, операция копирования в буфер обмена все еще работает. Я не смог найти никакой дополнительной информации о том, почему это может быть.
Мое текущее решение проблемы - просто игнорировать исключение... действительно ли это лучший способ?