2010-02-20 219 views
2

我有一個第三方ActiveX代表攝像機。 (AcxCamera myCam;使操作異步

我通過Connect方法將攝像機連接到視頻流。 (myCam.Connect(url);

需要說明的是,AcxCamera是繼承自第三方Acx的對象,所以我可以「控制」Connect方法。

現在,我有一些攝像機應該同步啓動。

我想可以這樣做:

foreach(AcxCamera cam in myCams) 
    cam.BeginConnect(); 

這可能嗎?

回答

1

當處理一個ActiveX控件時,幾乎可以肯定的是,你正在處理一個居住在STA公寓的引擎蓋下的COM對象。這意味着控件綁定到特定的線程,在這種情況下是UI。如果您嘗試從後臺線程調用它的方法,CLR和COM將合謀使調用實際發生在控件具有相關性的線程上。

簡而言之,即使使用一些花哨的線程邏輯,也不太可能實現你期望的目標。

+0

正如我所理解的,如果您不告訴COM對象是線程安全的,COM一次不會允許多次調用來訪問該對象。然而,告訴COM該對象是線程安全的,並且它會高興地允許該對象在多個線程上調用併發方法調用。 – serhio 2010-02-20 20:13:08