Detecção de erros globais na aplicação

Bem, fazendo uma pesquisa na internet achei algo
que realmente me pareceu ser bem interessante…
E gostaria de saber da comunidade, se alguem tem uma
solução voltada para Desktop no mesmo sentido.

protected void Application_Error(object sender, EventArgs e)

        {
            HttpContext ctx = HttpContext.Current;

            Exception exception = ctx.Server.GetLastError();

            StringBuilder str = new StringBuilder();
            str.Append("Error: "+exception.Message.ToString());
            str.Append("\r\n Details: "+ exception.InnerException.Message.ToString());
            str.Append("\r\n URL: " + Request.Url.AbsoluteUri.ToString());
            str.Append("\r\n Stack Trace: " + exception.InnerException.StackTrace.ToString());
            str.Append("\r\n Request Host: " + Request.UserHostAddress.ToString());
            str.Append("\r\n Host Name: " + Request.UserHostName.ToString());
            str.Append("\r\n User Agent: " + Request.UserAgent.ToString());
            str.Append("\r\n URL Referrer: " + Request.UrlReferrer.ToString());
            str.Append("\r\n UserName:  " + Request.LogonUserIdentity.Name.ToString());
            str.Append("\r\n Method: " + exception.TargetSite.ToString());
            str.Append("\r\n Source: " + exception.Source.ToString());

            // Compose Email
            MailMessage msg = new MailMessage();

            msg.From = new MailAddress("email automatico do sistema");
            msg.To.Add("seu-email");
            msg.Subject = "Error occurred in personal website application";
            msg.IsBodyHtml = true;
            msg.Body = str.ToString();

            SmtpClient smtp = new SmtpClient();
            smtp.Send(msg);

            String LogName = "Application";
            if (!EventLog.SourceExists(LogName))
            {
                EventLog.CreateEventSource(LogName, LogName);
            } 

 // Insert into Event Log
            EventLog Log = new EventLog();
            Log.Source = LogName;
            Log.WriteEntry(str.ToString(), EventLogEntryType.Error);

            ctx.Server.ClearError();

        }

O link deste material se encontra em: http://imasters.uol.com.br/artigo/15878/dotnet/detectando_erro_a_todo_custo/

Grato pela atenção.

Bom… editei a mensagem pois viajei na ideia… rs
na web erros podem ocorrer sem parar o servidor já que cada requisição é iniciada uma Thread nova, já nas aplicações desktop se um erro não for tratado a aplicação pode travar por completa , a não ser se você crie thread para tudo…
na web um Filter para pegar erros é suficiente, agora no desktop só utilizando try\catch nas chamadas das suas classes\metodos…
Você pode criar uma classe singleton para controlar os erros da sua aplicação desktop, e guardar os erros neste singleton e quando quiser mostrar ou enviar os error por email já tem os erros guardados, para pegar qualquer erro a todo custo no seu main, onde tudo começa na sua aplicação, tem que ter um try/catch para pegar qualquer Throwabl (Pai dos Erro e Exception)…
mais em aplicações desktop você tem que tratar os erros no evento senão a aplicação para e sai de sua funcionalidade … ai cabe a logica a ser utilizada.