2009-06-23 2 views
7

Мы разработали приложение, которое использует библиотеки взаимодействий Excel (Microsoft.Office.Interop.Excel) для чтения некоторых файлов Excel.Visual Studio: выполняется очистка кода при остановке отладки

При возникновении проблемы в приложении обрабатывается событие Application.ThreadException, поэтому ресурсы освобождаются (Excel закрыт ...).

Проблема заключается в том, что, когда мы используем отладчик VS, если мы прекращаем выполнение (потому что процесс разбивается на исключение или на точку останова, есть много причин, по которым мы это сделаем), ресурсы не и Excel остается открытым. И, конечно же, в следующий раз, когда приложение запустится ... он сработает, потому что в файле есть блокировки.

Так что я ищу способ принудительного освобождения объектов Excel, даже если он остановлен с помощью отладчика.

Любое предложение?

ответ

14

Вы можете использовать DTE (модель автоматизации VisualStudio), чтобы написать макрос, который будет вызываться, когда произойдет отладка остановки, ниже - фрагмент идеи.

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

Ниццы. Получает мой +1 –

+0

Интересно. Еще одно хорошее использование макросов. – RichardOD

+3

Так грустно, никаких макросов в VS 2012+. – roufamatic

1

К сожалению, для этого не существует способа. Кнопка остановки в визуальной студии убивает процесс, поэтому у него нет возможности очистить.

Как возможный вариант решения вашей проблемы (хотя и не очень хороший), вы можете написать процедуру очистки и выполнить ее вручную из непосредственного окна перед остановкой приложения.

[Изменить: Игнорировать меня. Этот ответ неверен. Shay Erlichmen придумал гораздо лучшее решение с использованием макроса]

+3

никогда не говорите никогда –

1

Одним из возможных вариантов является переключение на чистом .NET раствором, таким как , чтобы уйти от проблем производительности и надежности, связанных с COM-взаимодействия.

Отказ от ответственности: У меня есть SpreadsheetGear ООО

+0

Было бы неплохо, но немного дороже, так как нам просто нужно прочитать файл excel :). Я искал решения с открытым исходным кодом (например, Koogra http://koogra.sourceforge.net/), но он не работает с нашими файлами XLS. –

Смежные вопросы