2010-02-20 171 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