Я на самом деле придумала собственное решение, и, похоже, оно работает для меня.
// This allows the clipboard to have something copied to it.
public static void ClipboardPaste(String pasteString)
{
// This clears the clipboard
Clipboard.Clear();
// This is a "Try" of the statement inside {}, if it fails it goes to "Catch"
// If it "Catches" an exception. Then the function will retry itself.
try
{
// This, per some suggestions I found is a half second second wait before another
// clipboard clear and before setting the clipboard
System.Threading.Thread.Sleep(500);
Clipboard.Clear();
// This is, instead of using SetText another method to put something into
// the clipboard, it includes a retry/fail set up with a delay
// It retries 5 times with 250 milliseconds (0.25 second) between each retry.
Clipboard.SetDataObject(pasteString, false, 5, 250);
}
catch (Exception)
{
ClipboardPaste(pasteString);
}
}
Это, очевидно, C #, однако эти методы доступны всем Visual Studio. Я, очевидно, создал функцию зацикливания, а также попытался принудительно перенести ее в буфер обмена.
По сути, это поток. Допустим, вы хотите поместить слово clipboard в буфер обмена в любом месте вашего кода (при условии, что эта функция определена).
- Вызов функции ClipboardPaste («Буфер обмена»);
- Затем он очистит буфер обмена
- Тогда он «попытается» поместить вашу строку в буфер обмена.
- Сначала он ждет полсекунды (500 миллисекунд)
- Снова очищает буфер обмена
- Затем он пытается поместить строку в буфер обмена, используя SetDataObject
- SetDataObject в случае сбоя будет повторяться до пяти раз с задержкой 250 миллисекунд между каждой попыткой.
- Если первоначальная попытка не удалась, она ловит исключение, сбой, а затем повторяет попытку.
Да, в этом есть недостаток, если вы знаете, что у вашего буфера обмена всегда будет исключение, несмотря ни на что (бесконечный цикл). Однако я еще не сталкивался с бесконечным циклом с этим методом. Другим недостатком является то, что может пройти несколько секунд (существенно замедляя работу ваших приложений), прежде чем оно заработает, в то время как его попытки могут заморозить ваше приложение, как только оно завершится успешно, приложение все равно продолжит работу.