Por que uma chamada para código não gerenciado de um segmento .NET BackgroundWorker afetar a interface do usuário?

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

  •  08-07-2019
  •  | 
  •  

Pergunta

Eu tenho um longo executando série de operações em um segmento BackgroundWorker .NET 2.0. Quando faço uma chamada para código não gerenciado localizado em uma referência de montagem da UI está congelado até que os concluída chamada.

Por que isso? Eu não deveria estar fazendo essas chamadas do thread BackgroundWorker?


Sim, é um componente COM, mas eu não sei como dizer se é STA ou não e quais as implicações / resolução são / é. I fazer várias chamadas para esse componente, mas é apenas os de longa execução onde eu notar a UI tornando-se inútil.

Estas chamadas recuperar dados de um servidor.

Foi útil?

Solução

Você tem o tag COM na pergunta - você está chamando em um componente COM? É um componente STA? Se assim for, ele pode muito bem ser triagem de volta para fazer o seu trabalho no segmento interface do usuário de alguma forma. Vou prontamente admitir que estou longe de ser um especialista em coisas COM, mas eu não ficaria surpreso se esse fosse o problema.

O que acontece se você fizer as chamadas de um novo segmento que você criou explicitamente?

Outras dicas

Sim e também, isso acontece com todo o código não gerenciado ou apenas um componente ou API específico? Se um específico, o que é que o código não gerenciado fazendo?

Além disso, você poderia simplesmente comentar o seu código atual no BackgroundWorker (você estiver executando RunWorkerAsync certo ...) e colocar um sono lá. Se o seu GUI deixa de responder algo não está certo, caso contrário é o código que você está chamando como Jon aponta poderia ser o caso com COM.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top