Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- ObjectDataProvider.cs
- Utils.cs
- BamlLocalizabilityResolver.cs
- SerTrace.cs
- localization.cs
- PageCache.cs
- ObfuscationAttribute.cs
- UnescapedXmlDiagnosticData.cs
- ObjectAnimationUsingKeyFrames.cs
- AnnotationAdorner.cs
- TextRangeBase.cs
- FrameworkReadOnlyPropertyMetadata.cs
- XmlSchemaSimpleContent.cs
- PipelineComponent.cs
- UriParserTemplates.cs
- StrongTypingException.cs
- SafeNativeMethodsOther.cs
- LinearKeyFrames.cs
- OdbcRowUpdatingEvent.cs
- ClientBuildManagerCallback.cs
- CrossAppDomainChannel.cs
- Decoder.cs
- DeviceContext.cs
- DataTablePropertyDescriptor.cs
- DictionaryEntry.cs
- InfoCardTraceRecord.cs
- DesignerVerbCollection.cs
- BitmapEffect.cs
- DtdParser.cs
- IdnElement.cs
- XmlWriterTraceListener.cs
- MiniConstructorInfo.cs
- DataBinder.cs
- UnauthorizedAccessException.cs
- ScrollItemPattern.cs
- TemplateBamlRecordReader.cs
- HotSpot.cs
- WebPartAddingEventArgs.cs
- SQLBinaryStorage.cs
- LinqToSqlWrapper.cs
- SystemUnicastIPAddressInformation.cs
- CheckBoxPopupAdapter.cs
- PerfProviderCollection.cs
- TypeConvertions.cs
- Internal.cs
- ListDesigner.cs
- TextLine.cs
- PersonalizableTypeEntry.cs
- HtmlSelect.cs
- SafeRightsManagementSessionHandle.cs
- RowType.cs
- XsltLoader.cs
- FormViewPageEventArgs.cs
- StringFunctions.cs
- XmlQueryOutput.cs
- Oid.cs
- SupportsEventValidationAttribute.cs
- NameValueSectionHandler.cs
- PageCatalogPart.cs
- AutoGeneratedField.cs
- PixelFormats.cs
- DecimalStorage.cs
- SQLByteStorage.cs
- StructureChangedEventArgs.cs
- BooleanKeyFrameCollection.cs
- AttributeAction.cs
- CodeParameterDeclarationExpression.cs
- RsaSecurityTokenAuthenticator.cs
- SafeWaitHandle.cs
- ErrorTableItemStyle.cs
- UdpContractFilterBehavior.cs
- SelectionPatternIdentifiers.cs
- ArrangedElementCollection.cs
- Dynamic.cs
- AuthenticationModulesSection.cs
- ClientTargetCollection.cs
- ValueQuery.cs
- DataSourceHelper.cs
- SystemIcmpV6Statistics.cs
- PrinterUnitConvert.cs
- ResourcesChangeInfo.cs
- AppDomainProtocolHandler.cs
- AnonymousIdentificationSection.cs
- Rules.cs
- StickyNoteAnnotations.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- NotifyParentPropertyAttribute.cs
- TransactionChannelFactory.cs
- HttpPostClientProtocol.cs
- DeviceContext2.cs
- Style.cs
- FacetValueContainer.cs
- BevelBitmapEffect.cs
- FontNamesConverter.cs
- TextRenderer.cs
- Int32Animation.cs
- SmtpCommands.cs
- httpstaticobjectscollection.cs
- BasicKeyConstraint.cs
- ActiveXHelper.cs