Мы не знаем деталей вашего кода, но тот факт, что ваша библиотека классов должна знать, когда завершается процесс, может указывать на недостаток дизайна вашего приложения.
Если вам нужно выпуститьресурсы или очистить другие вещи детерминистическим способом, вы должны взглянуть на интерфейс IDisposable
.Если классы, предоставляемые вашей библиотекой, реализуют этот интерфейс, вызывающая сторона может легко заявить, что им больше не нужна функциональность dll, вызвав Dispose()
.
Возможно, хорошей отправной точкой для дальнейшего прочтения являются следующие статьи:
Например, в вашей библиотеке классов может быть следующий класс:
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;
}
}
}
В вашем основном модуле вы можете использовать его следующим образом;оператор using
гарантирует, что метод 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());
}
}
}