Я реализую что-то похожее на Проблема обработки необработанных исключений :
Application.ThreadException +=
(s, eargs) => LogException(eargs.Exception);
AppDomain.CurrentDomain.UnhandledException +=
(s, eargs) =>
LogException((Exception)eargs.ExceptionObject);
Application.SetUnhandledExceptionMode(
UnhandledExceptionMode.CatchException);
До сих пор это работало хорошо во всех моих приложениях. Когда я сталкиваюсь с ошибкой в этом асинхронном обработчике:
void DnsResolveCallback(IAsyncResult result)
{
try
{
IPHostEntry entry = Dns.EndGetHostEntry(result);
IPEndPoint endpoint = new IPEndPoint(entry.AddressList[0], Port);
socket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.BeginConnect(endpoint, ConnectCallback, null);
}
catch (Exception)
{
SetStatus(ConnectStatus.Disconnected);
throw;
}
SetStatus(ConnectStatus.Connecting);
}
Я могу поймать его, если добавлю
AppDomain.CurrentDomain.FirstChanceException +=
(sender, eargs) => LogException(eargs.Exception);
но не иначе. Я не хочу использовать FirstChanceException
, потому что это кажется неприятным и лишает смысла обработку исключений.