2009-08-18 6 views
0

Ich habe eine Windows-Anwendung geschrieben in WPF und WF, die auch interagiert mit externen Web-Services und eine lokale Kopie von Quickbooks über Quickbooks API.EXE bleibt im Task-Manager nach dem Beenden

Alles funktioniert gut, aber das einzige Problem ist, sogar nachdem wir die Windows-Anwendung und Quickbooks beenden, sehen wir immer noch die Windows-Anwendung ausführbar im Task-Manager sitzen.

Jeder hat eine Idee, wie wir das lösen können?

Dank, badallen

+0

Nur um zu überprüfen, Sie sind sicher, dass dies die eigenständige ausführbare Datei noch ausgeführt wird, und nicht * appname * .vshost.exe? –

+1

Ich würde versuchen, die Anwendung zu debuggen. Nachdem Sie "heruntergefahren" haben (das Hauptfenster geschlossen), brechen Sie den Debugger, um zu sehen, was die jetzt unsichtbare Anwendung macht. Möglicherweise möchten Sie den Microsoft-Symbolserver verwenden, um detaillierte Stack-Traces zu erhalten. Aus Ihrer Beschreibung ist es ziemlich schwer zu erraten, was das Problem ist. –

+1

Ich schlage vor, nach Nicht-Hintergrund-Threads zu suchen, die nicht gestoppt werden, wenn die Hauptanwendung heruntergefahren wird. –

Antwort

0

Nur eine Vermutung, aber ich würde Ihre WF oder Quickbooks aussehen API auf ihre Dispose() Anrufe hängen. Manchmal sind Netzwerk-APIs zu eifrig, um sauber zu bereinigen, anstatt nur zu schließen und aus dem Weg zu gehen.

Eine Möglichkeit, dies zu umgehen, ist über einen bg Thread mit einem Timeout. So etwas wie die folgenden

 Action close = api.Dispose; 
     var ar = close.BeginInvoke(cb => close.EndInvoke(cb), null); 
     ar.AsyncWaitHandle.WaitOne(500);