2010-07-29 74 views
0

我想使用TimerCallback委託機制來驅動實例對象從第三方.NET庫組件在單獨的線程上定時執行。TimerCallback委託來驅動一個STA模型.NET庫組件

當我嘗試從庫中的對象的我產生一個異常實例:

(對象名稱)只能從 單線程公寓被稱爲(STA)

子主要是入口點爲我的應用程序標記MTAThread在MSDN上的微軟例子here

回答

2

單線程COM組件有一個硬性要求,你ç在一個STA線程上對它們進行reate。您通過在Main()方法上使用[STAThread]屬性創建了一個消息循環。比如由Application.Run()創建的那個。

您現在可以從工作線程或定時器回調中調用這樣的組件。 COM確保組件的單線程需求得到滿足,並編組調用STA線程。擊敗你想要完成的事情,所有對組件的調用只在一個線程上運行。你會讓它變慢,而不是更快。打電話是不是快。

在這裏沒有祕密的東西,你不能神奇地將一個組件明確地聲明它不支持線程到一個線程組件。並不罕見,絕大多數COM組件或.NET組件都不支持線程。 COM和.NET組件的不同之處在於COM可以做些什麼。一個.NET組件通常會在某種線程競賽中發生故障,而沒有診斷。