Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SqlPersonalizationProvider.cs
- XmlSchemaAll.cs
- ExportException.cs
- DocumentPage.cs
- EventProviderWriter.cs
- UrlMappingsSection.cs
- WebPartMovingEventArgs.cs
- ExpressionVisitor.cs
- QilTernary.cs
- AuthorizationSection.cs
- DbTransaction.cs
- AssemblyUtil.cs
- ConstrainedDataObject.cs
- InvokeHandlers.cs
- UniqueIdentifierService.cs
- CodeLinePragma.cs
- HtmlShim.cs
- ControlCollection.cs
- DesignerVerbCollection.cs
- ProxyWebPartManager.cs
- DbConnectionHelper.cs
- BitmapDecoder.cs
- HtmlInputSubmit.cs
- WsdlParser.cs
- Resources.Designer.cs
- FixedBufferAttribute.cs
- HashAlgorithm.cs
- ProxyAttribute.cs
- MessageSmuggler.cs
- TextFormatterHost.cs
- AuthenticationManager.cs
- MimeBasePart.cs
- JapaneseCalendar.cs
- XmlValidatingReaderImpl.cs
- Configuration.cs
- FullTrustAssemblyCollection.cs
- ServiceDescription.cs
- CodeActivity.cs
- InvokePatternIdentifiers.cs
- Decimal.cs
- DbConnectionFactory.cs
- TextEditorDragDrop.cs
- FontStyleConverter.cs
- ProgressBar.cs
- SQLUtility.cs
- TableCell.cs
- QueryableDataSourceView.cs
- XmlHierarchicalEnumerable.cs
- SBCSCodePageEncoding.cs
- Focus.cs
- DataContractSerializer.cs
- ReaderOutput.cs
- HashCodeCombiner.cs
- XmlDomTextWriter.cs
- PointLight.cs
- XmlSerializationReader.cs
- FormsAuthenticationTicket.cs
- DirectoryInfo.cs
- Exceptions.cs
- WebEncodingValidator.cs
- OledbConnectionStringbuilder.cs
- PhysicalAddress.cs
- WebPartMinimizeVerb.cs
- WaitForChangedResult.cs
- DrawListViewSubItemEventArgs.cs
- safemediahandle.cs
- XmlReaderSettings.cs
- XmlByteStreamWriter.cs
- ImageFormatConverter.cs
- ExpressionBuilderContext.cs
- PropertyValidationContext.cs
- CheckedListBox.cs
- Identity.cs
- DateTimeFormatInfo.cs
- AuthenticationServiceManager.cs
- SelectionManager.cs
- Table.cs
- CachedBitmap.cs
- SecureUICommand.cs
- EmptyEnumerator.cs
- MenuBase.cs
- DataGridViewRowPostPaintEventArgs.cs
- InheritanceRules.cs
- SqlInternalConnectionTds.cs
- ValueOfAction.cs
- XmlNodeList.cs
- TextParagraphCache.cs
- AppSettingsReader.cs
- PropertyFilterAttribute.cs
- __Error.cs
- EntityDescriptor.cs
- MemoryRecordBuffer.cs
- SafePointer.cs
- Condition.cs
- UnsafePeerToPeerMethods.cs
- login.cs
- SingleAnimation.cs
- SerializationInfo.cs
- ImageFormat.cs
- EventLogEntry.cs