如何检测COM应用程序当前是否正在运行?

时间:2010-09-10 17:12:18

标签: c# multithreading performance com

我有一个使用.NET 4.0的多线程应用程序。有时这个COM应用程序引用了怪物并且停止了。

我想知道如何检查此进程当前是否在质询线程中运行。

例:
从主要应用程序开始:

ThreadedApp app = new ThreadedApp();
System.Threading.Thread thread = new System.Threading.Thread(x => app.Start());
thread.Start();

业务对象发挥作用:

class ThreadApp
{
    public void Start()
    {
       COMobject app = new COMobject(); // <- COM interop that starts up the COM app
       foreach (var item in items)
       {
          new ThreadProcess().Process(ref app, item);
       }
    }
}
class ThreadProcess
{
    public void Process(ref COMobject app, SomeItem item)
    {
       if (app == IVE_DIED_AND_I_DONT_KNOW_WHY) // How do I check this?
       {
          app = new COMobject();
       }
       // Process stuff
    }
}

主应用程序可以分离N个线程,因此可以分离N个COMobject应用程序。如果您观察任务管理器,您将看到为每个运行的线程列出的COMobject.exe。

我试图摆脱try / catch块以提高性能,但不知道如何从调用线程检查COM应用程序的状态。

希望这有意义和TIA。

1 个答案:

答案 0 :(得分:2)

尝试/捕获你所拥有的一切。尝试是免费的,只有捕获是昂贵的。无所谓。

通常,要非常小心地混合COM对象和线程。绝大多数都不支持免费线程。无论如何,这样做可以完全解决您遇到的问题。