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