Вы можете использовать событие AppDomain.UnhandledException
, чтобы сообщить другому домену приложения, возможно, через именованный мьютекс. Поскольку они являются общесистемными, вы можете создать файл с именем «MyAppHasCrashed» и немедленно заблокировать его. Когда вы нажимаете необработанное исключение, вы освобождаете мьютекс. С другой стороны, есть поток, который ждет на мьютекс. Поскольку он изначально заблокирован, поток будет сидеть в ожидании. При возникновении исключения поток возобновляется, и вы можете обработать сбой.
Mutex crashed = new Mutex(true, "AppDomain1_Crashed");
...
private void AppDomain_UnhandledException(...)
{
// do whatever you want to log / alert the user
// then unlock the mutex
crashed.ReleaseMutex();
}
Затем на другой стороне:
void CrashWaitThread()
{
try {
crashed = Mutex.OpenExisting("AppDomain1_Crashed");
}
catch (WaitHandleCannotBeOpenedException)
{
// couldn't open the mutex
}
crashed.WaitOne();
// code to handle the crash here.
}
Это что-то вроде хака, но хорошо работает как для междоменных, так и для межпроцессных процессов.