My understanding about this class is that you should use it when you want to be sure that the Finalizer(destructor) or the class is called, but from a couple of tests I did, it doesn't seem to be true. If it does not make sure that the dispose method is called, is there any other way of doing it? For example, if i want to make sure that some code is run to end my object, even if I close my program via Task Manager or something?
相关问题
- Sorting 3 numbers without branching [closed]
- Graphics.DrawImage() - Throws out of memory except
- Generic Generics in Managed C++
- Why am I getting UnauthorizedAccessException on th
- 求获取指定qq 资料的方法
If you really need code to run when when your program is Ctrl+Alt+Del'd, I don't think there's any other way than to have a separate program that monitors the first's state. If you really need that much architecture, I think you'd want to be using a service and some client apps, or a pair or services.
This is assuming, though, that you've already looked into the Application events. If you haven't, check out this overview.
EDIT Better than that overview, probably, is the ApplicationExit event.
The
Finalize()
method andDispose()
method are different things.By default,
Dispose
would never be called. You would have to call it yourself from theFinalize
method. Consider the following (ignoring the obvious failures in a proper finalize/dispose pattern here, for brevity):Finalizers in .Net are non-deterministic. That means there's no guarantee exactly when the finalizer will be called. Just because an object went out of scope or even was disposed, doesn't mean the finalizer will be called right away. The garbage collector will get around to it at some unknown time in the future.
Chris Brumme has explained this topic in a way I'm not sure could ever be topped. :)