Внедрение IDisposable само по себе не означает, что Dispose
будет вызываться при выходе.
Недостаточно деталей для понимания вашего приложения, но при неправильном закрытии устройство находится в плохом состоянии, чемможет быть попытка / наконец или, как Морон предложил Application.Exit (в зависимости от приложения, конечно).
Даже в этом случае вам не гарантируется, что код выполняется, поэтому, возможно, мне неясно, что вы пытаетесь выполнить или какую проблему вы пытаетесь решить.
Править:
В соответствии с комментариями OP, лучший вариант (для его желания, чтобы код "cleanup" выполнялся без специального вызова и проверки) был бы поместить его в деконструктор / финализатор.Обратите внимание, что запуск не гарантирован, но в большинстве случаев должен выполняться без вызова (в отличие от Dispose):
public class Foo
{
public Foo()
{
//Constructor
}
~Foo()
{
// Deconstructor/finalizer
}
}