Почему вызов неуправляемого кода из потока .NET BackgroundWorker влияет на пользовательский интерфейс? - PullRequest
0 голосов
/ 12 ноября 2008

У меня есть длинная серия операций в потоке .NET 2.0 BackgroundWorker. Когда я выполняю вызов неуправляемого кода, расположенного в сборке, на которую ссылаются, пользовательский интерфейс останавливается до завершения вызова.

Почему это? Разве я не должен делать эти звонки из потока BackgroundWorker?


Да, это COM-компонент, но я не уверен, как определить, является ли он STA или нет, и каковы / могут быть последствия / разрешение. Я делаю несколько звонков на этот компонент, но только в течение длительного времени я замечаю, что пользовательский интерфейс перестает отвечать на запросы.

Эти вызовы получают данные с сервера.

Ответы [ 3 ]

3 голосов
/ 12 ноября 2008

У вас есть вопрос о теге COM - вы вызываете компонент COM? Это STA компонент? Если это так, то он может как-то вернуться к выполнению своей работы в потоке пользовательского интерфейса. Я с готовностью признаю, что я далек от того, чтобы быть экспертом в области COM, но я не удивлюсь, если бы это была проблема.

Что произойдет, если вы будете делать вызовы из нового потока, который вы явно создали?

0 голосов
/ 12 ноября 2008

Кроме того, вы можете просто закомментировать ваш текущий код в BackgroundWorker (вы правильно запускаете RunWorkerAsync ...) и поставить там сон. Если ваш GUI перестает отвечать на запросы, что-то не так, в противном случае это код, который вы вызываете, как указывает Джон, может быть в случае с COM.

0 голосов
/ 12 ноября 2008

Да, а также, происходит ли это со всем неуправляемым кодом или только с конкретным компонентом или API? Если конкретный, что делает этот неуправляемый код?

...