Самый простой подход - заключить каждую из ваших «команд» в отдельный блок try / catch, что вы можете сделать довольно общим способом.Просто поймайте исключение, прежде чем оно попадет в цикл обработки сообщений.Поэтому, если бы у вас было:
public void ClickHandler(object sender, EventArgs e)
{
ExecuteCommand("foo");
}
, вы бы получили:
public void ClickHandler(object sender, EventArgs e)
{
ExecuteInTryCatch(() => ExecuteCommand("foo"));
}
private static void ExecuteInTryCatch(Action action)
{
try
{
action();
}
catch (Exception e)
{
// Log exception
}
}
Однако стоит отметить, что перехват всех исключений обычноотличная идея.Если вы можете, поймайте вместо этого очень конкретные исключения.