私は別のスレッドで実行したい低速の方法があります。 このメソッドは、アプリケーションのメインスレッドで作成されたCOMオブジェクトの呼び出しを使用します。メインスレッドで作成されたCOMオブジェクトを使用するブロッキングのないコードを実行する
が遅いコードとさせて頂きます。このです:
var bwImg = image.GetBitonalImage(); // <- slow image is a COM created in main thread
viewer.Document = bwImg; // <-- ATL control accepting the B/W COM image
ことが重要ならば、私はWPFアプリケーションと「視聴者にこれをやっていることはWinFormsHostです。
私はこれを行うことは、この非同期を作成し、アプリケーションの実行をブロックしないであろうことを想定:
var t = new Thread((ThreadStart)(() =>
{
var bwImg = image.GetBitonalImage(); // <- this is in separate thread
Dispatcher.Invoke((Action)(() =>
{
viewer.Document = bwImg; // <- this again on the main
}));
}));
t.Start();
画像がいくつかの後の時点で示されますことを私のためokです、と私はどのように気にしませんかなり後に。
しかし、アプリケーションが同じようにブロックされることが起こります。 私はプロファイリングを行いましたが、実際にはほとんどの時間がGetBitonalImageに費やされましたが、 'viewer.Document = bwImg'にはほとんど使われませんでした。
コードを完全に削除すると、アプリが反応的になるため、他のコードの障害ではありません。
これ以降、同じ画像COMオブジェクト(B/W結果ではなく元のもの)を使用するコードがあります。
これは正しい方法ですか?問題はCOMオブジェクトメソッド呼び出しのためにある可能性がありますか?
私のケースと思われます。ありがとう –