Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / ApplicationContext.cs / 1305376 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FloaterBaseParagraph.cs
- mediaclock.cs
- ChangeTracker.cs
- Formatter.cs
- BaseServiceProvider.cs
- DataGridViewColumnEventArgs.cs
- KeyedCollection.cs
- BitmapDownload.cs
- LinkedDataMemberFieldEditor.cs
- WCFServiceClientProxyGenerator.cs
- TextParagraphCache.cs
- NavigationProperty.cs
- ScriptModule.cs
- XmlSchemaChoice.cs
- XmlNamespaceManager.cs
- MatcherBuilder.cs
- DoubleAnimation.cs
- IndicFontClient.cs
- UnknownWrapper.cs
- MetadataFile.cs
- XmlTypeAttribute.cs
- SHA384CryptoServiceProvider.cs
- UrlMappingsSection.cs
- XDeferredAxisSource.cs
- x509store.cs
- ObjectComplexPropertyMapping.cs
- WindowsSpinner.cs
- LineVisual.cs
- DATA_BLOB.cs
- Quaternion.cs
- TypedDataSourceCodeGenerator.cs
- DeploymentSectionCache.cs
- ParallelTimeline.cs
- CharStorage.cs
- SearchForVirtualItemEventArgs.cs
- ModelUIElement3D.cs
- WindowsAuthenticationModule.cs
- MembershipValidatePasswordEventArgs.cs
- ConfigViewGenerator.cs
- NewItemsContextMenuStrip.cs
- TableCell.cs
- WebPartTransformer.cs
- UriScheme.cs
- TdsRecordBufferSetter.cs
- Int32Collection.cs
- PreviewKeyDownEventArgs.cs
- WebPartEditorCancelVerb.cs
- SettingsSection.cs
- GlobalizationSection.cs
- PropertyTabChangedEvent.cs
- TextDecoration.cs
- ServiceNameCollection.cs
- LongMinMaxAggregationOperator.cs
- MostlySingletonList.cs
- BamlMapTable.cs
- Int32EqualityComparer.cs
- Types.cs
- TraceFilter.cs
- DataTemplate.cs
- LogoValidationException.cs
- BasicBrowserDialog.designer.cs
- ImageField.cs
- ObjectQueryState.cs
- ScrollEvent.cs
- TextRenderer.cs
- RectangleGeometry.cs
- ToolStripDropDown.cs
- PowerStatus.cs
- CodeEventReferenceExpression.cs
- EventDescriptor.cs
- UserControl.cs
- EmptyTextWriter.cs
- OdbcException.cs
- SchemaDeclBase.cs
- milexports.cs
- TableLayoutStyleCollection.cs
- DiscoveryExceptionDictionary.cs
- TextBoxAutomationPeer.cs
- SiteMapHierarchicalDataSourceView.cs
- SettingsPropertyCollection.cs
- CacheHelper.cs
- GroupStyle.cs
- FreezableOperations.cs
- ServiceOperationWrapper.cs
- VirtualPathUtility.cs
- SoapExtensionImporter.cs
- OutOfMemoryException.cs
- InvokePatternIdentifiers.cs
- EndpointDiscoveryMetadata11.cs
- PageBuildProvider.cs
- Simplifier.cs
- SelectedDatesCollection.cs
- PermissionSet.cs
- DoubleLink.cs
- ArgumentNullException.cs
- CDSCollectionETWBCLProvider.cs
- PasswordBox.cs
- Animatable.cs
- WebConfigurationHost.cs
- HtmlWindowCollection.cs