Обнаружил очень странный глюк — если на машине запущен RDP Client (удаленный рабочий стол, он же mstsc), то Clipboard.SetText() срывает крышу:
1. Если вызвать Clipboard.SetText() и сразу же Clipboard.GetText() — GetText() возвращает корректное значение.
2. Если сделать SetText(); Sleep(100); GetText() — вылетает
птичка Exception.
3. Если делать SetText() по нажатию на одну кнопку, а GetText() — на другую, последний возвращает пустую строку.
Shift+Insert из всех прочих приложений также ничего не вставляет.
Глюк проявляется не на удаленной машине, открытой через RDP, а на клиентской машине, где физически запущен RDP Client!
Подозреваю, что возникает конфликт между clipboard sharing в RDP-клиенте и .Net-реализацией класса Clipboard. Вопрос — как бороть. Вариант Капитана "не использовать RDP-клиент" работает, но не устраивает, т.к. лень перетаскивать 100500 редкоиспользуемых приложений с сервера на клиентскую машину.
P.S. На машине 2 экрана и RDP Client обычно максимизируется на второстепенный. Может, здесь загвоздка?
13.01.11 11:58: Перенесено модератором из '.NET' — TK
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Не вставляет из_других_приложений или вообще нигде не вставляет?
MyApp.Clipboard.SetText() -> OtherApp.Shift+Insert не работает с вероятностью больше 90%
OtherApp.Ctrl+Insert -> AnyApp.Shift+Insert и OtherApp.CtrlInsert -> MyApp.Clipboard.GetText() всегда работает
Вроде, достаточно формально описал.
TK>Берите .net framework sources и смотрите где именно падает / возвращает пустой текст.
Ссылку на KB не подбросите? Там, вроде, тучу каких-то флагов в студии надо было проставлять.
TK>Работа с clipboard не самая сложная штука — всегда можно написать свой аналог класса Clipboard.
Таки да. Но у форум-кунов совета спросить всегда быстрее
TK>Возможно, что RDP-клиенте просто периодически блокирует доступ к clipboard — попробуйте мониторить содержимое буфера в цикле.
Думаю, он в цикле вызывает GetText(), чтобы синхронизироваться с удаленной машиной. Буду копать.
Здравствуйте, TK, Вы писали:
TK>Берите .net framework sources и смотрите где именно падает / возвращает пустой текст. Работа с clipboard не самая сложная штука — всегда можно написать свой аналог класса Clipboard.
Посмотри лучше сам. Там для этой цели зачем-то OLE приплели.
https://connect.microsoft.com/VisualStudio/feedback/details/92689/clipboard-settext-throws-exception?wa=wsignin1.0
Opened: 14.10.2005 4:58:24
и до сих пор не исправимли,судя по дате последнего сообщения