Как справиться с заблокированным буфером обмена и другими странностями
За последние пару часов я обнаружил довольно специфическую ошибку, которая возникает из-за того, что в другом приложении открыт буфер обмена. По сути, как буфер обмена является общим ресурсом (согласно"Почему мой общий буфер обмена не работает?") и вы пытаетесь выполнить
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 мсек.
Есть одна последняя вещь, которая была отмечена конечным пользователем. То есть, несмотря на генерируемое исключение, операция копирования в буфер обмена все еще работает. Я не смог найти дополнительную информацию о том, почему это может быть.
Мое текущее решение проблемы состоит в том, чтобы просто игнорировать исключение ... это действительно лучший способ?