Как объясняется в моем ответе на другой связанный с вами вопрос здесь , вы не должны предпринимать действия по ссылочным типам из своего финализатора. Вы реализуете это, используя параметр bool disposing
вашего Disposed(bool)
метода, как вы это сделали. Вы передаете true
, когда Disposed(bool)
вызывается явно из метода void Dispose()
, и передаете false
при вызове из финализатора, что вы также сделали.
Однако вам также необходимо защитить свой вызов на excel.Quit()
, чтобы он вызывался , а не , когда Disposed(bool)
вызывается через финализатор. То есть вы должны вызывать excel.Quit()
только тогда, когда аргумент bool disposing
равен true
.
Следовательно, код вашего Disposed(bool)
метода должен выглядеть следующим образом:
public void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
excel.Quit();
}
disposed = true;
}
}
После этого вы можете использовать свой класс "MSExcel" следующим образом:
using (MSExcel msExcel = new MSExcel)
{
// The code calling your 'MSExcel' object goes here.
}
Делая это таким образом, когда ваш код попадает в закрывающую скобку "}" вашего блока using оператор , метод Dispose для вашего класса 'MSExcel' будет вызываться автоматически, гарантируя excel.Quit()
вызывается детерминистически, а не из финализатора.
Надеюсь, это поможет ...
Mike