2011-03-22 72 views
0

我在新的C#應用​​程序中使用舊的COM組件(通信類庫)。 COM控件處理與我們的一些儀器的通信。其中一個功能是下載數據,這取決於數據的大小,可能是一個相當長的操作。新的C#應用​​程序被設置爲處理下載作爲一個線程。問題是,當代碼執行下載功能時,其他一切都凍結了,所以我不能點擊UI中的「取消」按鈕。我已經添加了一個睡眠()(嘗試從0到1000的所有參數作爲參數)每個塊後調用下載代碼沒有成功。有我困惑的部分是,如果我的下載線程,而不是調用COM控件,只是在C#中執行無限循環,我可以取消它,因爲UI是活動的。有沒有人有任何想法,我可以嘗試使下載線程產量?如何使COM控件中的代碼產生其他進程?

感謝

+0

什麼是COM組件的ThreadingModel? – Martin 2011-03-22 14:30:57

回答

1

如果COM組件的線程模型是STA和你在主UI線程創建,然後調用從輔助線程的通話將被封下載數據的方法和背部上執行UI線程和基本上阻止你的應用程序。

需要在一個STA線程中創建STA COM組件,因爲對該組件的所有調用都將在創建該組件的線程中編組並執行,而與實際調用COM組件上的方法的線程無關。

+0

+1不管這是否解決了OP的問題,我發現這個答案非常豐富。 – 2011-03-22 14:56:35

+0

謝謝你的回答。 – Curtis 2011-03-22 15:50:04

相關問題