創建我有我想在單獨的線程運行慢方法一個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();
這是確定的我,圖片被在一段時間後表示,我並不怎麼在意很久以後。
但碰巧應用程序以相同的方式被阻止。 我做了分析和確實大部分時間都是在GetBitonalImage度過的,幾乎沒有在「viewer.Document = bwImg」。
刪除代碼完全使應用程序響應,所以它不是其他代碼錯誤。
在此之後還有其他代碼使用相同的圖像COM對象(不是黑/白的結果,但原來的)。
這是這樣做的正確方法?問題可能是因爲COM對象方法調用嗎?
看來我的情況。謝謝 – 2012-02-08 19:34:20