2 Stimmen

Wie kann man feststellen, ob eine COM-Anwendung gerade läuft?

Ich habe eine Multithreading-Anwendung mit .NET 4.0. Manchmal flippt diese COM-Anwendung referenziert aus und einfach stoppen.

Ich möchte wissen, wie ich überprüfen kann, ob dieser Prozess gerade im fraglichen Thread läuft.

Ejemplo:
Aus der Hauptanwendung ausüben:

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

Business Object ausüben:

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
    }
}

Die Hauptanwendung kann N Threads abspalten und somit auch N COM-Objekt-Anwendungen abspalten. Wenn Sie den Task-Manager beobachten, sehen Sie die COMobject.exe für jeden laufenden Thread aufgelistet.

Ich versuche, von Try/Catch-Blöcken wegzukommen, um die Leistung zu erhöhen, weiß aber nicht, wie man den Zustand der COM-Anwendung vom aufrufenden Thread aus überprüft.

Ich hoffe, das macht Sinn und TIA.

2voto

Hans Passant Punkte 894572

Try/Catch ist alles, was Sie haben. Der Versuch ist umsonst, nur der Fang ist teuer. Sollte keine Rolle spielen.

Im Allgemeinen sollten Sie sehr vorsichtig sein, wenn Sie COM-Objekte und Threads vermischen. Die große Mehrheit von ihnen unterstützt kein Free-Threading. Wenn Sie es trotzdem tun, haben Sie genau das Problem, das Sie jetzt haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X