Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / RunTime / DebugEngine / ProgramPublisher.cs / 1305376 / ProgramPublisher.cs
// Copyright (c) Microsoft Corp., 2004. All rights reserved.
#region Using directives
using System;
using System.Threading;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Diagnostics;
#endregion
namespace System.Workflow.Runtime.DebugEngine
{
[ComImport, Guid(Guids.CLSID_WDEProgramPublisher)]
internal class WDEProgramPublisher
{
}
internal sealed class ProgramPublisher
{
#region Data members
private bool isPublished = false;
IWDEProgramPublisher publisher;
private DebugController controller;
GCHandle gchWdeProgramNode; // This is used to pin the wdeProgramNodeSingleton (VS Debugger is using address to calculate cookies)
private IWDEProgramNode wdeProgramNodeSingleton;
#endregion
#region Methods
public ProgramPublisher()
{
this.publisher = null;
}
public bool Publish(DebugController controller)
{
Debug.WriteLine("WDE: ProgramPublisher.Publish()");
// In order to guarantee that the Program Nodes are always in the MTA, publish on a separate thread.
if (isPublished)
return false;
try
{
this.controller = controller;
Thread publisherThread = new Thread(PublisherThreadFunc);
publisherThread.SetApartmentState(ApartmentState.MTA);
publisherThread.IsBackground = true;
publisherThread.Start();
publisherThread.Join();
}
catch(Exception e)
{
// Eat up exceptions if the debugger is not installed.
Debug.WriteLine("WDE: ProgramPublisher.Publish() exception: " + e.ToString());
}
return this.isPublished;
}
private void PublisherThreadFunc()
{
try
{
this.publisher = new WDEProgramPublisher() as IWDEProgramPublisher;
this.wdeProgramNodeSingleton = new ProgramNode(this.controller);
this.gchWdeProgramNode = GCHandle.Alloc(this.wdeProgramNodeSingleton);
this.publisher.Publish(this.wdeProgramNodeSingleton);
this.isPublished = true;
}
catch(Exception e)
{
// Ignore any exceptions that are caused by WDE.dll not being present or registered.
Debug.WriteLine("WDE: ProgramPublisher.PublisherThreadFunc() exception: " + e.ToString());
}
}
public void Unpublish()
{
if (!isPublished)
return;
Debug.WriteLine("WDE: ProgramPublisher.Unpublish()");
// In order to guarantee that the Program Nodes are always in the MTA, unpublish on a separate thread.
try
{
Thread unpublisherThread = new Thread(UnpublishThreadFunc);
unpublisherThread.SetApartmentState(ApartmentState.MTA);
unpublisherThread.IsBackground = true;
unpublisherThread.Start();
unpublisherThread.Join();
}
catch (Exception e)
{
// Eat up exceptions if the debugger is not installed, etc.
Debug.WriteLine("WDE: ProgramPublisher.Unpublish() exception: " + e.ToString());
}
Debug.WriteLine("WDE: ProgramPublisher.Unpublish() Done");
}
private void UnpublishThreadFunc()
{
try
{
this.publisher.Unpublish(this.wdeProgramNodeSingleton);
}
catch (Exception e)
{
Debug.WriteLine("WDE: ProgramPublisher.UnpublishThreadFunc(): catch exception " + e.ToString());
// We eat up any exceptions that can occur because the host process is abnormally terminated.
}
finally
{
this.gchWdeProgramNode.Free();// Rrelease pin on the this.wdeProgramNodeSingleton
Marshal.ReleaseComObject(this.publisher);
this.publisher = null;
}
this.isPublished = false;
}
#endregion
}
[ComImport(), Guid(Guids.IID_IWDEProgramPublisher), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IWDEProgramPublisher
{
void Publish([MarshalAs(UnmanagedType.IUnknown)] object ProgramNode);
void Unpublish([MarshalAs(UnmanagedType.IUnknown)] object ProgramNode);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corp., 2004. All rights reserved.
#region Using directives
using System;
using System.Threading;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Diagnostics;
#endregion
namespace System.Workflow.Runtime.DebugEngine
{
[ComImport, Guid(Guids.CLSID_WDEProgramPublisher)]
internal class WDEProgramPublisher
{
}
internal sealed class ProgramPublisher
{
#region Data members
private bool isPublished = false;
IWDEProgramPublisher publisher;
private DebugController controller;
GCHandle gchWdeProgramNode; // This is used to pin the wdeProgramNodeSingleton (VS Debugger is using address to calculate cookies)
private IWDEProgramNode wdeProgramNodeSingleton;
#endregion
#region Methods
public ProgramPublisher()
{
this.publisher = null;
}
public bool Publish(DebugController controller)
{
Debug.WriteLine("WDE: ProgramPublisher.Publish()");
// In order to guarantee that the Program Nodes are always in the MTA, publish on a separate thread.
if (isPublished)
return false;
try
{
this.controller = controller;
Thread publisherThread = new Thread(PublisherThreadFunc);
publisherThread.SetApartmentState(ApartmentState.MTA);
publisherThread.IsBackground = true;
publisherThread.Start();
publisherThread.Join();
}
catch(Exception e)
{
// Eat up exceptions if the debugger is not installed.
Debug.WriteLine("WDE: ProgramPublisher.Publish() exception: " + e.ToString());
}
return this.isPublished;
}
private void PublisherThreadFunc()
{
try
{
this.publisher = new WDEProgramPublisher() as IWDEProgramPublisher;
this.wdeProgramNodeSingleton = new ProgramNode(this.controller);
this.gchWdeProgramNode = GCHandle.Alloc(this.wdeProgramNodeSingleton);
this.publisher.Publish(this.wdeProgramNodeSingleton);
this.isPublished = true;
}
catch(Exception e)
{
// Ignore any exceptions that are caused by WDE.dll not being present or registered.
Debug.WriteLine("WDE: ProgramPublisher.PublisherThreadFunc() exception: " + e.ToString());
}
}
public void Unpublish()
{
if (!isPublished)
return;
Debug.WriteLine("WDE: ProgramPublisher.Unpublish()");
// In order to guarantee that the Program Nodes are always in the MTA, unpublish on a separate thread.
try
{
Thread unpublisherThread = new Thread(UnpublishThreadFunc);
unpublisherThread.SetApartmentState(ApartmentState.MTA);
unpublisherThread.IsBackground = true;
unpublisherThread.Start();
unpublisherThread.Join();
}
catch (Exception e)
{
// Eat up exceptions if the debugger is not installed, etc.
Debug.WriteLine("WDE: ProgramPublisher.Unpublish() exception: " + e.ToString());
}
Debug.WriteLine("WDE: ProgramPublisher.Unpublish() Done");
}
private void UnpublishThreadFunc()
{
try
{
this.publisher.Unpublish(this.wdeProgramNodeSingleton);
}
catch (Exception e)
{
Debug.WriteLine("WDE: ProgramPublisher.UnpublishThreadFunc(): catch exception " + e.ToString());
// We eat up any exceptions that can occur because the host process is abnormally terminated.
}
finally
{
this.gchWdeProgramNode.Free();// Rrelease pin on the this.wdeProgramNodeSingleton
Marshal.ReleaseComObject(this.publisher);
this.publisher = null;
}
this.isPublished = false;
}
#endregion
}
[ComImport(), Guid(Guids.IID_IWDEProgramPublisher), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IWDEProgramPublisher
{
void Publish([MarshalAs(UnmanagedType.IUnknown)] object ProgramNode);
void Unpublish([MarshalAs(UnmanagedType.IUnknown)] object ProgramNode);
}
}
// 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
- InternalSendMessage.cs
- ScriptingJsonSerializationSection.cs
- Vector3DConverter.cs
- ToolStripLocationCancelEventArgs.cs
- ValidationError.cs
- ChangeToolStripParentVerb.cs
- PolyBezierSegment.cs
- ToolTipAutomationPeer.cs
- ClrProviderManifest.cs
- DrawingContextWalker.cs
- LicFileLicenseProvider.cs
- Command.cs
- StylusPointPropertyUnit.cs
- AssemblyResourceLoader.cs
- RecommendedAsConfigurableAttribute.cs
- ValidationPropertyAttribute.cs
- XmlRawWriterWrapper.cs
- SecurityTokenTypes.cs
- TableParaClient.cs
- Activator.cs
- ComboBoxItem.cs
- MaskedTextBox.cs
- UnknownBitmapDecoder.cs
- SqlParameter.cs
- LeftCellWrapper.cs
- JsonReaderWriterFactory.cs
- AvTrace.cs
- SqlDataSourceEnumerator.cs
- ReadOnlyDataSourceView.cs
- LayoutEvent.cs
- TreeSet.cs
- oledbmetadatacollectionnames.cs
- Soap.cs
- MessagePartDescription.cs
- Brushes.cs
- ItemList.cs
- AdornedElementPlaceholder.cs
- ToolbarAUtomationPeer.cs
- DesignerActionList.cs
- ProviderBase.cs
- PropertyInfoSet.cs
- OutputScopeManager.cs
- IntellisenseTextBox.designer.cs
- DummyDataSource.cs
- StylusEditingBehavior.cs
- CookieHandler.cs
- BaseCodeDomTreeGenerator.cs
- ToolboxItemImageConverter.cs
- CapabilitiesUse.cs
- DebuggerAttributes.cs
- CodePropertyReferenceExpression.cs
- TabOrder.cs
- Enlistment.cs
- UpdateManifestForBrowserApplication.cs
- EncoderNLS.cs
- SqlStatistics.cs
- EntityDataSourceConfigureObjectContext.cs
- OdbcCommand.cs
- ReferentialConstraint.cs
- TrackingProvider.cs
- HistoryEventArgs.cs
- XamlPointCollectionSerializer.cs
- MultiBinding.cs
- RectangleConverter.cs
- CertificateManager.cs
- ComboBoxItem.cs
- WSSecurityPolicy.cs
- HtmlImage.cs
- DataGridViewTopRowAccessibleObject.cs
- BrowserCapabilitiesFactory.cs
- ConfigViewGenerator.cs
- Module.cs
- ClientBuildManagerCallback.cs
- DrawingVisual.cs
- TreeNodeCollectionEditorDialog.cs
- ListViewDeletedEventArgs.cs
- SpeechUI.cs
- ServiceDescriptionContext.cs
- TextViewElement.cs
- GridViewCommandEventArgs.cs
- SequenceQuery.cs
- CommentAction.cs
- SiteIdentityPermission.cs
- StrongNamePublicKeyBlob.cs
- Debugger.cs
- WebPartPersonalization.cs
- TextRangeSerialization.cs
- SubclassTypeValidator.cs
- BuildProvider.cs
- HttpException.cs
- RoleServiceManager.cs
- XmlSchemaFacet.cs
- ClassGenerator.cs
- WindowsListViewItemCheckBox.cs
- HyperLinkColumn.cs
- CodeGenerator.cs
- QuotedPrintableStream.cs
- EventProxy.cs
- CommandLibraryHelper.cs
- RouteItem.cs