Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Программная выгрузка доменов приложения
Программная выгрузка доменов приложения
Важно понимать, что среда CLR не позволяет выгружать отдельные компоновочные блоки .NET. Однако, используя метод AppDomain.Unload(), вы можете избирательно выгрузить домен приложения из объемлющего процесса. При этом домен приложения выгрузит по очереди каждый компоновочный блок.
Напомним, что тип AppDomain определяет набор событий, одним из которых является DomainUnload. Это событие генерируется тогда, когда домен приложения (не являющийся доменом, созданным по умолчанию) выгружается из содержащего этот домен процесса. Другим заслуживающим внимания событием является событие ProcessExit, которое генерируется при выгрузке из процесса домена, создаваемого по умолчанию (что, очевидно, влечет за собой завершение всего процесса). Так, если вы хотите программно выгрузить anotherAD из процесса AppDomainManipulator.exe и получить извещение о том, что соответствующий домен приложения закрыт, можете использовать следующую программную логику событий.
static void Main(string[] args) {
…
// Привязка к событию DomainUnload.
anotherAD.DomainUnload += new EventHandler(anotherAD_DomainUnload);
// Теперь выгрузка anotherAD.
AppDomain.Unload(anotherAD);
}
Обратите внимание на то, что событие DomainUnload работает в паре с делегатом System.EventHandler, поэтому формат anotherAD_DomainUnload() требует следующих аргументов.
public static void anotherAD_DomainUnload(object sender, EventArgs e) {
Console.WriteLine("***** Выгрузка anotherAD! *****n");
}
Если вы хотите получить извещение при выгрузке домена приложения, созданного по умолчанию, измените метод Main() так, чтобы обработать событие ProcessEvent, соответствующее домену приложения по умолчанию:
static void Main(string [] args) {
…
AppDomain defaultAD = AppDomain.CurrentDomain;
defaultAD.ProcessExit +=new EventHandler(defaultAD_ProcessExit);
}
и определите подходящий обработчик событий.
private static void defaultAD_ProcessExit (object sender, EventArgs e) {
Console.WriteLine("***** Выгрузка defaultAD! *****n");
}
Исходный код. Проект AppDomainManipulator размещен в подкаталоге, соответствующем главе 13.
- Выражения в значениях по умолчанию для доменов
- 1.8 Ввод-вывод типичного приложения хранения данных
- Извлечение и возврат документов в приложениях Microsoft Office 2007
- Использование панели задач Управление документами в приложениях Office 2007
- Часть II Программная часть компьютера
- Я плохо вижу, но знаю, что в Windows XP есть программная лупа. Как ее можно добавить?
- Каждый раз после загрузки Windows запускаются разные бесполезные приложения, а возле часов появляются лишние значки. Что...
- Удаляю Windows Messenger из автозапуска, но после перезагрузки программа снова запускается. С другими приложениями таког...
- Создание приложения-клиента в C#
- Глава 4 Работа с приложениями
- Управление приложениями
- Пример приложения Pocket PC, демонстрирующий работу средств контроля запуска событий