У меня есть проблема с OpenFileDialog из Windows Forms (не имеет значения, если я использую в консольном приложении, Win формы или wpf) (C #).
У меня есть небольшой тестовый проект с кнопкой, которая при нажатии попросит пользователя выбрать изображение (используя OpenFileDialog) и отправить его путь к методу процесса. Метод process находится в собственном коде c ++ и доступен с помощью c ++ cli (CLR). Этот метод отправляет запрос в веб-службу и ожидает ответа (веб-служба является локальной, поэтому ответ быстрый).
Проблема заключается в следующем: если я нажимаю кнопку 2 раза (выберите изображение + обработка и после его завершения я обрабатываю другое изображение), в 3-й раз окно не будет отображаться, оно застревает в ShowDialog.
Если я запускаю его из WPF, это дает мне эту ошибку:
Произошел DisconnectedContext
Сообщение: Помощник по управляемой отладке «DisconnectedContext» обнаружил проблему в «d: \ Project \ WpfApplication1.vshost.exe».Дополнительная информация: переход в контекст COM 0x1b09d5d0 для этого RuntimeCallableWrapper завершился ошибкой со следующей ошибкой: вызванный объект отключился от своих клиентов. (Исключение из HRESULT: 0x80010108 (RPC_E_DISCONNECTED)). Обычно это происходит потому, что контекст COM 0x1b09d5d0, в котором был создан этот RuntimeCallableWrapper, был отключен или занят чем-то другим и не может обработать переход контекста. Прокси-сервер не будет использоваться для обслуживания запроса COM-компонента, и вызовы будут выполняться непосредственно для COM-компонента. Это может привести к повреждению или потере данных. Чтобы избежать этой проблемы, убедитесь, что все контексты / апартаменты / потоки COM остаются живыми и доступны для перехода к контексту, пока приложение полностью не завершит работу с RuntimeCallableWrappers, представляющим компоненты COM, которые живут внутри них.
Есть идеи как решить это или что это значит?
Я обнаружил проблему (это было не из сообщения веб-службы): где-то в своем нативном коде я неинициализировал COM, но для .NET UI нужен COM, чтобы он работал и работал.
Так что все, что мне нужно было сделать, это удалить унитализацию COM из моего собственного кода.
Других решений пока нет …