簡體   English   中英

后台工作者啟動COM組件

[英]Background Worker Initiate COM Component

我正在使用一個非常慢的COM組件(花了幾分鍾才能提供我請求的數據),以便保持UI響應,在WPF應用程序中,我正在考慮使用Task或BackgroundWorker類創建后台線程,並禁用UI上的所有控件,以防止出現任何問題,因為該組件不可線程化。

該組件僅作為標准COM參考添加到項目中。 問題在於,它根本無法從任何后台線程運行(包括使用new進行初始化)。 它可以從UI線程正常工作。 任何指針將不勝感激。

您是否嘗試向Main()添加[STAThread]屬性?

[STAThread]
static void Main()
{
}

應用STAThreadAttribute時,它將當前線程的單元狀態更改為單線程。
在無需深入討論COM和線程的情況下,該屬性可確保當前線程與可能希望通過COM與之通信的其他線程之間的通信機制。
啟動新的UI項目時,通常會自動將此屬性應用於Main。


或者(如SLaks告訴我的那樣),您可以嘗試:

Thread t = new Thread(ThreadProc);
t.SetApartmentState(ApartmentState.STA);
....

public void ThreadProc()
{
    // Thread function
}

您可能還想使用

bool result = t.TrySetApartmentState(ApartmentState.STA);

並檢查result值,以確保您的嘗試成功

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM