2008-11-12 8 views
0

J'ai une longue série d'opérations dans un thread .NET 2.0 BackgroundWorker. Lorsque j'appelle un code non géré situé dans un assembly référencé, l'interface utilisateur est gelée jusqu'à la fin de l'appel.Pourquoi un appel au code non géré à partir d'un thread .NET BackgroundWorker affecte-t-il l'interface utilisateur?

Pourquoi est-ce? Est-ce que je ne devrais pas faire ces appels à partir du fil BackgroundWorker?


Oui, il est un composant COM, mais je ne sais pas comment dire si elle est STA ou non et quelles sont les implications/résolution sont/est. Je fais plusieurs appels à ce composant mais ce ne sont que les appels de longue durée où je remarque que l'interface utilisateur ne répond plus.

Ces appels récupèrent des données à partir d'un serveur.

Répondre

3

Vous avez la balise COM dans la question - appelez-vous un composant COM? Est-ce un composant STA? Si c'est le cas, il se peut que vous reveniez faire son travail sur le thread de l'interface utilisateur en quelque sorte. Je reconnais volontiers que je suis loin d'être un expert en COM, mais je ne serais pas surpris si c'était le problème. Que se passe-t-il si vous effectuez les appels à partir d'un nouveau thread que vous avez créé explicitement?

0

Oui et aussi, cela se produit-il avec tout le code non managé ou juste un composant spécifique ou API? Si tel est le cas, que fait ce code non géré?

0

En outre, vous pouvez simplement commenter votre code actuel dans BackgroundWorker (vous exécutez RunWorkerAsync à droite ...) et mettre un sommeil là-dedans. Si votre interface graphique ne répond plus, quelque chose ne va pas, sinon c'est le code que vous appelez comme le fait remarquer Jon pourrait être le cas avec COM.

Questions connexes