Как справиться с заблокированным буфером обмена и другими странностями

За последние пару часов я обнаружил довольно специфическую ошибку, которая возникает из-за того, что в другом приложении открыт буфер обмена. По сути, как буфер обмена является общим ресурсом (согласно"Почему мой общий буфер обмена не работает?") и вы пытаетесь выполнить

Clipboard.SetText(string)

или же

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 мсек.

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

Мое текущее решение проблемы состоит в том, чтобы просто игнорировать исключение ... это действительно лучший способ?

Ответы на вопрос(8)

Ваш ответ на вопрос