Вопрос по clr, appdomain, c# – Выгрузить событие для домена приложения по умолчанию?

2

Естьразгружать событие илилюбой событие, уведомление, сообщение, механизм или ловушка, которые я могу использовать, чтобы получить уведомление до "дефолт" домен приложения выгружается?

У меня есть код, который должен знать, когда заканчивается домен приложения (почти всегда домен по умолчанию).

Примечание: я неНе знаю, какое приложение будет создавать разработчик, когда он использует мой код. Возможно:

консольное приложениеприложение WinFormsприложение ASP.netвеб-сайт ASP.netСреда выполнения Callable Wrapper (RCW) во время выполнениярасширение оболочки Windows Explorerили служба Windows

В любом случае, мне нужно знать, когда домен закрывается, чтобы я мог сделать некоторые "материал», И я не собираюсь требовать от пользователя вызова какого-либоНеисправность" или же "Очистка» метод. (Кроме того, предположить, что пользователь должен сам вызывать метод, неt ответить на вопрос: о том, чтобы быть уведомленным, когда домен приложения ям работает в выключен).

Смотрите такжеВыгрузить событие для домена по умолчанию?Как получить уведомление до финализации статических переменных
stackoverflow.com/questions/16673332/... может дать некоторые советы M.A. Hanin
@Sniffer Я хочу знать, когда AppDomain, в котором я нахожусь (который 100% времени будет доменом по умолчанию) выгружается, так что я могу "неисправность". Ian Boyd
Хорошо я понял. Вы смотрели наAppDomain.ProcessExit, Концептуально это событие также должно сигнализировать об окончании домена по умолчанию-AppDomain (и также возникает в домене по умолчанию). Тем не менее, общее время выполнения таких обработчиков событий ограничено, и работа, которую вы пытаетесь выполнить, звучит скорее "участвует", YMMV. Christian.K
Перечисление доменов приложений невозможно. Hans Passant

Ваш Ответ

2   ответа
3
AppDomain.CurrentDomain.DomainUnload += 
    (object sender, EventArgs e) => { /*do stuff*/ };
4

я забыл опубликовать свой ответ отмой другой небольшой вариант этого вопроса, В конечном итоге ответ пришел изответ М.А. Ханина.

Здесь нетDomainUnload, но есть:ProcessExit

class Contoso
{
   //constructor
   public Contoso()
   {
      //...

      //Catch domain shutdown (Hack: frantically look for things we can catch)
      if (AppDomain.CurrentDomain.IsDefaultAppDomain())
         AppDomain.CurrentDomain.ProcessExit += MyTerminationHandler;
      else
         AppDomain.CurrentDomain.DomainUnload += MyTerminationHandler;
   }

   private void MyTerminationHandler(object sender, EventArgs e)
   {
      //The domain is dying. Serialize out our values
      this.Dispose();
   }

   ...
}

Заметка: Любой код передан в общественное достояние. Атрибуция не требуется.

На самом деле естьDomainUnload событие. Просто хотел уточнить это, хотя способ, которым вы сделали это на самом деле лучше. Chuck Dee

Похожие вопросы