No conocemos los detalles de su código, pero el hecho de que la biblioteca de su clase tenga en cuenta cuándo se está produciendo el proceso podría indicar un error de diseño en su aplicación.
Si necesita liberar recursos o limpiar otras cosas de manera determinista, debería echar un vistazo a la interfaz IDisposable
. Si las clases expuestas por su biblioteca implementan esta interfaz, la persona que llama puede decir fácilmente que ya no necesita la funcionalidad dll llamando al Dispose()
.
Tal vez un buen punto de partida para la lectura adicional son los siguientes artículos:
Por ejemplo, usted podría tener la siguiente clase en la biblioteca de clases:
using System;
using System.IO;
public class ResourceManager : IDisposable
{
private Stream _resource;
private bool _disposed;
public void Dispose()
{
Dispose(true);
// Use SupressFinalize in case a subclass
// of this type implements a finalizer.
GC.SuppressFinalize(this);
}
public void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
Console.WriteLine("Exiting Process. Cleaning up.");
// free resources here
if (_resource != null)
_resource.Dispose();
Console.WriteLine("Object disposed.");
}
// Indicate that the instance has been disposed.
_resource = null;
_disposed = true;
}
}
}
En el módulo principal se puede utilizar de la siguiente manera; la declaración using
garantizará que el método se llama Dispose()
:
using System;
using System.Windows.Forms;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
using (ResourceManager manager = new ResourceManager())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
¿Por qué lo necesitas? Las DLL administradas liberan sus recursos automáticamente por el recolector de basura. Si necesita liberar recursos no administrados, use Finalización. –
@FractalizerR: El uso de finalizadores para liberar recursos es * no * recomendado porque es indeterminista. En cambio, el objeto debería implementar 'IDisposable'. –