I'm jumping in late, apologies if this has already mentioned, but the MS
Exception Management Application Block is a bunch of free code from their
best practices group which can be dropped into an application to provide
many exception-related services.  It may be worth a look by the original
poster.

 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/
emab-rm.asp

(watch for wrapping)

HTH

-----Original Message-----
From: Moderated discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED] On Behalf Of Ayyappan Nair
Sent: Thursday, March 27, 2003 6:33 PM
To: [EMAIL PROTECTED]
Subject: Re: [ADVANCED-DOTNET] Which way is the better way to trap all
unexpected exception !


Hi,

Any Unhandled Exception will generate an UnhandledException Event and this
can be trapped by the UnhandledExceptionEventHandler delegate. The method
associated with the delegate will be executed every time an Unhandled
Exception occurs. Inside this method you can do any processing you want like
your BugTracking.LogException(ex); and maybe inform the user that a fatal
error occurred and then exit the application. 

Whether the application should terminate or user should be allowed to
continue after an exception, depends on the kind of Exception being thrown.
I think you should have separate catch blocks for the kind of exceptions
that can be identified as not fatal and allow the user to continue with the
application. The catch filter should be based on the type of exceptions
likely in the try block. Regarding Application.Exit(), this will terminate
only the current thread. So if it's called in any other thread other than
the Main thread, only that thread will terminate, but the main thread will
continue to execute. You might want to use Environment.Exit() to terminate
the application caused by a fatal error from any thread.

[STAThread]
static void Main() 
{ 
        AppDomain.CurrentDomain.UnhandledException += new
UnhandledExceptionEventHandler(UnhandledHandler);  
        try
        {
                string strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data
                        Source=db.mdb;Persist            Security
Info=False;";
        OleDbConnection conn=new OleDbConnection(strConnect); 
            conn.Open();
            Application.Run(new MainForm(conn));
        }
        catch(SystemException ex)
        {
                BugTracking.LogException(ex);
                Application.Exit();
        } 
}

static void UnhandledHandler (Object sender, UnhandledExceptionEventArgs e) 
{
        //Inform user of a fatal error
        //Maybe MessegeBox.Show
        BugTracking.LogException(ex);
        Environment.Exit();
}

HTH,
Ayyappan Nair

-----Original Message-----
From: Moderated discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED] On Behalf Of Th�i Tr� H�ng
Sent: Wednesday, March 26, 2003 10:54 PM
To: [EMAIL PROTECTED]
Subject: [ADVANCED-DOTNET] Which way is the better way to trap all
unexpected exception !

Hi all , 
I'm looking for a way to trap all unexpected exception , and I found two
: 

- The first is trap at the appliction run point : (C# code)
     
[STAThread]
static void Main() 
{ 
        try
        {
                string strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=db.mdb;Persist                 Security Info=False;";
                OleDbConnection conn=new OleDbConnection(strConnect); 
                conn.Open();
                Application.Run(new MainForm(conn));
        }
        catch(Exception ex)
        {
                BugTracking.LogException(ex);
                Application.Exit();
        } 
}

- The second is use OnThreadException (VB.NET code)

AddHandler Application.ThreadException, AddressOf Me.OnThreadException ...

Sub OnThreadException(ByVal sender As Object,_
                            ByVal t As
System.Threading.ThreadExceptionEventArgs)
        BugTracking.LogException(t;
        Application.Exit();             

End Sub


Could anyone explain me which way is better - I guest is is the same ?

And a further question - how can I determine when I must use Appliction.Exit
and when I can let user continue his job ? (In VB6.0 I know a good mechanism
to do that but I can not use this in .Net or I don't know how to do that -
may be ) 

Save me !

Th�i Tr� H�ng
Software Solution Center 
HPT Vietnam Co Ltd
tel : (084)  8.458518 - Ext : 327
mobile : 0908391763

Reply via email to