0

BackgroundWorker.NET 2.0スレッドで長時間実行される一連の操作があります。参照アセンブリにあるアンマネージ コードを呼び出すと、呼び出しが完了するまで UI がフリーズします。

どうしてこれなの?BackgroundWorkerスレッドからこれらの呼び出しを行うべきではありませんか?


はい、それは COM コンポーネントですが、それが STA であるかどうか、およびその影響/解決策が何であるかを判断する方法がわかりません。そのコンポーネントを何度か呼び出しますが、UI が応答しなくなっているのに気付くのは長時間実行されるものだけです。

これらの呼び出しは、サーバーからデータを取得します。

4

3 に答える 3

3

質問に COM タグがあります。COM コンポーネントを呼び出していますか? それは STA コンポーネントですか? もしそうなら、何らかの方法で UI スレッドで作業を行うためにマーシャリングを行っている可能性があります。私が COM の専門家になるにはほど遠いことはすぐに認めますが、それが問題だったとしても驚かないでしょう。

明示的に作成した新しいスレッドから呼び出しを行うとどうなりますか?

于 2008-11-12T07:52:05.727 に答える
0

また、BackgroundWorker の現在のコードをコメントアウトして (RunWorkerAsync を正しく実行しています...)、そこにスリープを入れることもできます。GUIが応答しなくなった場合、何かが正しくありません。そうでない場合は、Jonが指摘するように呼び出しているコードがCOMの場合である可能性があります。

于 2008-11-12T08:00:43.840 に答える
0

はい、また、これはすべてのアンマネージ コードで発生しますか?それとも特定のコンポーネントまたは API だけで発生しますか? 特定のコードの場合、そのアンマネージ コードは何をしているのですか?

于 2008-11-12T07:33:36.403 に答える