¿Por qué una llamada a código no administrado desde un hilo de .NET BackgroundWorker afecta la interfaz de usuario?

StackOverflow https://stackoverflow.com/questions/283241

  •  08-07-2019
  •  | 
  •  

Pregunta

Tengo una larga serie de operaciones en un hilo .NET 2.0 BackgroundWorker . Cuando realizo una llamada al código no administrado ubicado en un ensamblado al que se hace referencia, la IU se congela hasta que se completa la llamada.

¿Por qué es esto? ¿No debería hacer estas llamadas desde el hilo BackgroundWorker ?


Sí, es un componente COM pero no estoy seguro de cómo saber si es STA o no y cuáles son las implicaciones / resolución. Realizo varias llamadas a ese componente, pero solo en las de larga duración noto que la interfaz de usuario deja de responder.

Estas llamadas recuperan datos de un servidor.

¿Fue útil?

Solución

Tienes la etiqueta COM en la pregunta: ¿estás llamando a un componente COM? ¿Es un componente STA? Si es así, bien podría estar volviendo a ordenar para hacer su trabajo en el hilo de la interfaz de usuario de alguna manera. Debo admitir que estoy muy lejos de ser un experto en COM, pero no me sorprendería si ese fuera el problema.

¿Qué sucede si realiza las llamadas desde un nuevo hilo que ha creado explícitamente?

Otros consejos

Sí y también, ¿sucede esto con todo el código no administrado o solo con un componente específico o API? Si es específico, ¿qué está haciendo ese código no administrado?

Además, puede simplemente comentar su código actual en el BackgroundWorker (está ejecutando RunWorkerAsync correctamente ...) y dormir allí. Si su GUI deja de responder, algo no está bien, de lo contrario, es el código al que llama, ya que Jon señala que podría ser el caso con COM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top