try..catch catch the error only running inside of VS.NET

try..catch catch the error only running inside of VS.NET

Post by RHJhZ29zIE » Sat, 08 Mar 2008 23:53:03


S 2008 target .NET 3.5, release mode.
One windows form application project with 2 forms:
First form with a button with the next code:

try
{
using ( SecondForm secondForm = new SecondForm() )
{
secondForm.ShowDialog();
}
}
catch ( Exception )
{

MessageBox.Show( "Error" );

}

Second form with a button with the next code:

throw new Exception();

When I run the solution with F5 everything it is ok:
See first form
press button
See second form
press button
Second form disappears
the message box is displayed

If I run outside of VS.NET or with CTRL+F5:
See first form
press button
See second form
press button
NET error message window is displayed (Second form is still on screen)

Have you any idea why?

Error is:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Exception: Exception of type 'System.Exception' was thrown.
at UI2.SecondForm.button1_Click(Object sender, EventArgs e) in
C:\Code\Invat\UI2\SecondForm.cs:line 21
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons
button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg,
IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase:
file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
UI2
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Code/Invat/UI2/bin/Release/UI2.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase:
file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase:
file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase:
file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For
 
 
 

try..catch catch the error only running inside of VS.NET

Post by Marc Grave » Sun, 09 Mar 2008 00:23:44

This same problem was posted recently... basically, it means that your Load
event (or OnLoad override) is throwing an exception. For some freaky reasons
(I never saw a good answer) this won't see the exception handler in the
stack.

Marc

 
 
 

try..catch catch the error only running inside of VS.NET

Post by Ben Voigt » Thu, 13 Mar 2008 00:35:39


The ShowDialog method sets up a modal message loop, this message loop must
have its own exception handler.

For example,
System.Windows.Forms.Application+ThreadContext.LocalModalMessageLoop catches
and discards all exceptions (I am not sure if that is the message loop
running in this case, it looks like it is, called from RunMessageLoopInner,
reason == 4). There's some logic mixed in where a different path is
executed if ((this.ComponentManager is Application.ComponentManager)) and
that may explain the different behavior inside the de *** .