Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / WinForms / Managed / System / WinForms / ApplicationContext.cs / 1 / ApplicationContext.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using System.Diagnostics;
using System.ComponentModel;
///
///
/// ApplicationContext provides contextual information about an application
/// thread. Specifically this allows an application author to redifine what
/// circurmstances cause a message loop to exit. By default the application
/// context listens to the close event on the mainForm, then exits the
/// thread's message loop.
///
public class ApplicationContext : IDisposable {
Form mainForm;
object userData;
///
///
/// Creates a new ApplicationContext with no mainForm.
///
public ApplicationContext() : this(null) {
}
///
///
/// Creates a new ApplicationContext with the specified mainForm.
/// If OnMainFormClosed is not overriden, the thread's message
/// loop will be terminated when mainForm is closed.
///
public ApplicationContext(Form mainForm) {
this.MainForm = mainForm;
}
///
~ApplicationContext() {
Dispose(false);
}
///
///
/// Determines the mainForm for this context. This may be changed
/// at anytime.
/// If OnMainFormClosed is not overriden, the thread's message
/// loop will be terminated when mainForm is closed.
///
public Form MainForm {
get {
return mainForm;
}
set {
EventHandler onClose = new EventHandler(OnMainFormDestroy);
if (mainForm != null) {
mainForm.HandleDestroyed -= onClose;
}
mainForm = value;
if (mainForm != null) {
mainForm.HandleDestroyed += onClose;
}
}
}
///
[
SRCategory(SR.CatData),
Localizable(false),
Bindable(true),
SRDescription(SR.ControlTagDescr),
DefaultValue(null),
TypeConverter(typeof(StringConverter)),
]
public object Tag {
get {
return userData;
}
set {
userData = value;
}
}
///
///
/// Is raised when the thread's message loop should be terminated.
/// This is raised by calling ExitThread.
///
public event EventHandler ThreadExit;
///
///
/// Disposes the context. This should dispose the mainForm. This is
/// called immediately after the thread's message loop is terminated.
/// Application will dispose all forms on this thread by default.
///
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
///
protected virtual void Dispose(bool disposing) {
if (disposing) {
if (mainForm != null) {
if (!mainForm.IsDisposed) {
mainForm.Dispose();
}
mainForm = null;
}
}
}
///
///
/// Causes the thread's message loop to be terminated. This
/// will call ExitThreadCore.
///
public void ExitThread() {
ExitThreadCore();
}
///
///
/// Causes the thread's message loop to be terminated.
///
protected virtual void ExitThreadCore() {
if (ThreadExit != null) {
ThreadExit(this, EventArgs.Empty);
}
}
///
///
/// Called when the mainForm is closed. The default implementation
/// of this will call ExitThreadCore.
///
protected virtual void OnMainFormClosed(object sender, EventArgs e) {
ExitThreadCore();
}
///
/// Called when the mainForm is closed. The default implementation
/// of this will call ExitThreadCore.
///
private void OnMainFormDestroy(object sender, EventArgs e) {
Form form = (Form)sender;
if (!form.RecreatingHandle) {
form.HandleDestroyed -= new EventHandler(OnMainFormDestroy);
OnMainFormClosed(sender, e);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using System.Diagnostics;
using System.ComponentModel;
///
///
/// ApplicationContext provides contextual information about an application
/// thread. Specifically this allows an application author to redifine what
/// circurmstances cause a message loop to exit. By default the application
/// context listens to the close event on the mainForm, then exits the
/// thread's message loop.
///
public class ApplicationContext : IDisposable {
Form mainForm;
object userData;
///
///
/// Creates a new ApplicationContext with no mainForm.
///
public ApplicationContext() : this(null) {
}
///
///
/// Creates a new ApplicationContext with the specified mainForm.
/// If OnMainFormClosed is not overriden, the thread's message
/// loop will be terminated when mainForm is closed.
///
public ApplicationContext(Form mainForm) {
this.MainForm = mainForm;
}
///
~ApplicationContext() {
Dispose(false);
}
///
///
/// Determines the mainForm for this context. This may be changed
/// at anytime.
/// If OnMainFormClosed is not overriden, the thread's message
/// loop will be terminated when mainForm is closed.
///
public Form MainForm {
get {
return mainForm;
}
set {
EventHandler onClose = new EventHandler(OnMainFormDestroy);
if (mainForm != null) {
mainForm.HandleDestroyed -= onClose;
}
mainForm = value;
if (mainForm != null) {
mainForm.HandleDestroyed += onClose;
}
}
}
///
[
SRCategory(SR.CatData),
Localizable(false),
Bindable(true),
SRDescription(SR.ControlTagDescr),
DefaultValue(null),
TypeConverter(typeof(StringConverter)),
]
public object Tag {
get {
return userData;
}
set {
userData = value;
}
}
///
///
/// Is raised when the thread's message loop should be terminated.
/// This is raised by calling ExitThread.
///
public event EventHandler ThreadExit;
///
///
/// Disposes the context. This should dispose the mainForm. This is
/// called immediately after the thread's message loop is terminated.
/// Application will dispose all forms on this thread by default.
///
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
///
protected virtual void Dispose(bool disposing) {
if (disposing) {
if (mainForm != null) {
if (!mainForm.IsDisposed) {
mainForm.Dispose();
}
mainForm = null;
}
}
}
///
///
/// Causes the thread's message loop to be terminated. This
/// will call ExitThreadCore.
///
public void ExitThread() {
ExitThreadCore();
}
///
///
/// Causes the thread's message loop to be terminated.
///
protected virtual void ExitThreadCore() {
if (ThreadExit != null) {
ThreadExit(this, EventArgs.Empty);
}
}
///
///
/// Called when the mainForm is closed. The default implementation
/// of this will call ExitThreadCore.
///
protected virtual void OnMainFormClosed(object sender, EventArgs e) {
ExitThreadCore();
}
///
/// Called when the mainForm is closed. The default implementation
/// of this will call ExitThreadCore.
///
private void OnMainFormDestroy(object sender, EventArgs e) {
Form form = (Form)sender;
if (!form.RecreatingHandle) {
form.HandleDestroyed -= new EventHandler(OnMainFormDestroy);
OnMainFormClosed(sender, e);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FontSourceCollection.cs
- MessageSecurityProtocol.cs
- CookielessData.cs
- StylusDevice.cs
- SmtpLoginAuthenticationModule.cs
- PasswordTextNavigator.cs
- SpeechUI.cs
- Rotation3DKeyFrameCollection.cs
- ConfigurationElementCollection.cs
- ErrorsHelper.cs
- LinqDataSource.cs
- SspiWrapper.cs
- StickyNoteHelper.cs
- TableLayout.cs
- CallbackException.cs
- MailDefinition.cs
- DataPagerFieldItem.cs
- ByteStack.cs
- ModelPerspective.cs
- ServiceBusyException.cs
- AliasGenerator.cs
- FormsAuthenticationModule.cs
- MouseActionConverter.cs
- ResourcePool.cs
- HtmlImage.cs
- FontSourceCollection.cs
- TextServicesDisplayAttribute.cs
- CodeMemberMethod.cs
- QilTargetType.cs
- ConfigErrorGlyph.cs
- StandardTransformFactory.cs
- PermissionToken.cs
- CacheHelper.cs
- RelOps.cs
- RelationshipConverter.cs
- GestureRecognizer.cs
- _Events.cs
- AsmxEndpointPickerExtension.cs
- ImageClickEventArgs.cs
- PerfService.cs
- ResourceAttributes.cs
- DeviceContexts.cs
- AutomationElement.cs
- MatrixCamera.cs
- AttachmentCollection.cs
- SQLDecimal.cs
- UIElementPropertyUndoUnit.cs
- loginstatus.cs
- DebuggerAttributes.cs
- GifBitmapDecoder.cs
- Transform3DGroup.cs
- TypeExtensionConverter.cs
- SelectionManager.cs
- StandardTransformFactory.cs
- NavigationCommands.cs
- KeyFrames.cs
- ChildDocumentBlock.cs
- Ray3DHitTestResult.cs
- ToolStripContentPanelDesigner.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- PagerSettings.cs
- AssemblyInfo.cs
- RetriableClipboard.cs
- KeyboardDevice.cs
- DesigntimeLicenseContext.cs
- EventTask.cs
- ClipboardData.cs
- DataRelation.cs
- HttpChannelBindingToken.cs
- ImageMap.cs
- UnsafeNativeMethods.cs
- ClientScriptManager.cs
- BitmapEffectState.cs
- ConfigurationElement.cs
- SpinLock.cs
- OleDbConnectionFactory.cs
- PerformanceCounterManager.cs
- IMembershipProvider.cs
- DesignerView.Commands.cs
- EntityDesignerBuildProvider.cs
- FunctionOverloadResolver.cs
- JobCollate.cs
- TransportManager.cs
- ToolStripGrip.cs
- RegisteredHiddenField.cs
- PageParser.cs
- ScriptManager.cs
- DataControlField.cs
- UnauthorizedWebPart.cs
- BitHelper.cs
- EventLog.cs
- ReadOnlyDictionary.cs
- XPathNode.cs
- ConnectionStringsExpressionBuilder.cs
- BitArray.cs
- RequiredAttributeAttribute.cs
- RecognizeCompletedEventArgs.cs
- TlsSspiNegotiation.cs
- GlobalProxySelection.cs
- PassportAuthentication.cs