PRB: Choosing Quit in WFC Exception Dialog Box Shuts Down Host (197032)
The information in this article applies to:
- Microsoft Visual J++ 6.0
- Microsoft Visual Basic Standard Edition for Windows 4.0
- Microsoft Visual Basic Professional Edition for Windows 4.0
- Microsoft Visual Basic Enterprise Edition for Windows 4.0
This article was previously published under Q197032 SYMPTOMS
When an ActiveX control created with Windows Foundation Classes for Java
(WFC) is placed in Visual Basic and throws an exception, the default WFC
exception dialog box gives you the choice to either Continue, Quit, or See
Details. If you click Quit, the entire process hosting the WFC control
quits.
In an application hosted by the Visual J++ Integrated Development
Environment (IDE), this is okay because the application is running in a
different process than the IDE. However, in Visual Basic, the IDE and the
application are in the same process until you actually make an .exe, so
choosing Quit kills the entire Visual Basic IDE, along with any unsaved
work.
RESOLUTION
There are two methods for resolving this issue. The first method is to
never choose Quit in the WFC exception dialog box that appears when you
receive an unhandled exception while hosting a WFC control in a Visual
Basic application while running in the Visual Basic IDE. Instead, you
should always choose Continue and then shut down the Visual Basic
application from within the Visual Basic IDE.
The second method is to add an onThreadExceptionEventHandler to your WFC
ActiveX control. This event handler is called instead of the default WFC
exception handling routines and the default dialog box that contains the
Quit option does not appear. Your WFC control, however, is responsible for
handling exceptions, notifying the user, and shutting down as necessary.
Sample Code
The following sample code adds a very simple ThreadException Handler to a
WFC ActiveX control:
// ... Other WFC imports ...
import com.ms.wfc.app.*; // This creates the Application object.
public class Control1 extends UserControl {
// Define a Thread Exception Handler Delegate.
private void threadException(Object sender, ThreadExceptionEvent e) {
MessageBox.show("In Exception Handler");
}
public Control1() {
// Add the Thread Exception Handler delegate.
Application.addOnThreadException( new ThreadExceptionEventHandler
(this.threadException));
// Required for Visual J++ Form Designer support.
initForm();
}
// The rest of your WFC ActiveX control goes here...
(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by Steve
Horne, Microsoft Corporation.
STATUS
This behavior is by design.
Modification Type: | Minor | Last Reviewed: | 7/14/2004 |
---|
Keywords: | kbBug kbprb kbWFC KB197032 |
---|
|