2009-06-23 2 views
7

Abbiamo sviluppato un'applicazione che utilizza le librerie di interoperabilità di Excel (Microsoft.Office.Interop.Excel) per leggere alcuni file di Excel.Visual Studio: esecuzione del codice di pulizia quando il debug si arresta

Quando si verifica un problema nell'applicazione, viene gestito l'evento Application.ThreadException, quindi le risorse vengono rilasciate (Excel è chiuso ...).

Il problema è che quando usiamo il debugger VS, se interrompiamo l'esecuzione (perché il processo si interrompe su un'eccezione, o un punto di interruzione, ci sono molte ragioni per cui dovremmo farlo), le risorse non sono rilasciato e Excel rimane aperto. E, naturalmente, la prossima volta che viene lanciata l'applicazione ... si blocca perché ci sono dei blocchi sul file.

Quindi sto cercando un modo per forzare il rilascio degli oggetti di Excel, anche quando è stato arrestato con il debugger.

Qualche suggerimento?

risposta

14

È possibile utilizzare il DTE (VisualStudio Automation Model) di scrivere una macro che verrà richiamato quando un debug arresto accade, qui di seguito è un frammento di questa idea.

Private Sub DebuggerEvents_OnEnterBreakMode(
    ByVal Reason As EnvDTE.dbgEventReason, 
    ByRef ExecutionAction As EnvDTE.dbgExecutionAction) Handles DebuggerEvents.OnEnterBreakMode 
    If (Reason = dbgEventReason.dbgEventReasonStopDebugging) Then 
     // DO YOUR CLEAN UP CODE HERE 
    End If 
End Sub 
+0

Nizza. Ottiene il mio +1 –

+0

Interessante. Un altro buon uso di macro. – RichardOD

+3

Così triste, niente macro in VS 2012+. – roufamatic

1

Purtroppo non c'è un modo per farlo. Il pulsante stop in visual studio uccide il processo, quindi non ha alcuna possibilità di ripulire.

Come possibile soluzione del problema (sebbene non molto buono), è possibile scrivere una routine di pulizia ed eseguirla manualmente dalla finestra immediata prima di arrestare l'app.

[Modifica: Ignora me. Questa risposta è sbagliata. Shay Erlichmen ha messo a punto una soluzione molto migliore utilizzando una macro]

+3

mai dire mai –

1

Una possibilità è di passare ad una soluzione NET puro come allontanarsi dai problemi di prestazioni e affidabilità associati interoperabilità COM.

Disclaimer: proprio SpreadsheetGear LLC

+0

Sarebbe bello ma un po 'caro in quanto abbiamo solo bisogno di leggere un file excel :). Ho esaminato le soluzioni open source (come Koogra http://koogra.sourceforge.net/) ma non funziona con i nostri file XLS. –