I have a class in C# where I want to close out some communication ports properly when my class is being disposed. However, the finalizer is never being called when I exit the program. Why is that? Am I doing something wrong?
I am calling the dispose manually which goes through and closes all communications. This is not fired either.
Here is the finalizer I am using:
~Power()
{
Dispose(false);
}
The finalizer (which is what you're using here) is only called during the Finalization phase, which will happen during GC.
If you implement IDisposable correctly, this should never get called. I cover this in detail on my series on IDisposable.
That being said, if your "communication ports" are handled via managed classes, you shouldn't use a finalizer at all. This is adding overhead that does not help you whatsoever. Just implement IDisposable (properly), and let the managed wrappers around the port classes handle finalization if required.