2010-09-10 87 views
2

我有一个使用.NET 4.0的多线程应用程序。有时候,这个COM应用程序引用了怪异并停止。如何检测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。

+0

你的意思是COM +? – 2010-09-10 18:30:49

+0

是一个COM +对象/应用程序... – 2010-09-10 18:47:33

回答

2

Try/catch就是你的全部。尝试是免费的,只有收获是昂贵的。应该不重要。

通常,要非常小心地混合COM对象和线程。绝大多数人不支持免费的线程。无论如何,这样做会为您带来完全的问题。

+0

不够公平。我有一种感觉,它会卡住它。该应用程序按预期运行,我只是想让它变得更快。不幸的是,我不得不以这种风格使用这个COM对象。谢谢。 – 2010-09-10 19:58:48

+0

这是非常非常不明智的。当组件爆炸时,你不知道你的程序处于什么状态。典型的故障模式是一个损坏的堆,无法捕捉和修复。好吧,祝你好运 – 2010-09-10 22:13:48

相关问题