Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StringResourceManager.cs
- DbParameterCollection.cs
- ZipIOLocalFileHeader.cs
- UndoManager.cs
- CdpEqualityComparer.cs
- TypefaceMetricsCache.cs
- SQLGuidStorage.cs
- mactripleDES.cs
- CompilationSection.cs
- glyphs.cs
- LayoutTable.cs
- StreamWriter.cs
- SatelliteContractVersionAttribute.cs
- PtsHelper.cs
- BrowserCapabilitiesFactoryBase.cs
- Lease.cs
- ExpandoObject.cs
- EnterpriseServicesHelper.cs
- ReferencedCategoriesDocument.cs
- IfAction.cs
- WorkflowApplicationEventArgs.cs
- MsmqAppDomainProtocolHandler.cs
- XsltLoader.cs
- BmpBitmapDecoder.cs
- Overlapped.cs
- ImageListUtils.cs
- ErrorWrapper.cs
- WebPartConnectionsConfigureVerb.cs
- AppDomainManager.cs
- CommentEmitter.cs
- SmtpFailedRecipientsException.cs
- FrameworkElement.cs
- DataTableCollection.cs
- ListViewUpdatedEventArgs.cs
- GcHandle.cs
- AmbientLight.cs
- ImageCreator.cs
- SnapLine.cs
- AstTree.cs
- PropertyGeneratedEventArgs.cs
- NativeMethodsCLR.cs
- StrokeNodeOperations.cs
- BooleanKeyFrameCollection.cs
- StrongNamePublicKeyBlob.cs
- CharacterMetricsDictionary.cs
- XmlAttributeAttribute.cs
- FileSystemEventArgs.cs
- ConnectionStringSettingsCollection.cs
- RepeatInfo.cs
- ISAPIWorkerRequest.cs
- IndexerNameAttribute.cs
- GenericTextProperties.cs
- IssuanceLicense.cs
- XmlSchemaGroup.cs
- XamlReaderConstants.cs
- HttpException.cs
- Range.cs
- XamlStream.cs
- SelectionProcessor.cs
- PerformanceCountersElement.cs
- _NestedSingleAsyncResult.cs
- LiteralSubsegment.cs
- DoubleLinkList.cs
- ContentValidator.cs
- NativeBuffer.cs
- HandleCollector.cs
- ListParagraph.cs
- ServiceHttpHandlerFactory.cs
- XmlSerializerNamespaces.cs
- ActiveXHelper.cs
- ApplicationInfo.cs
- QuaternionKeyFrameCollection.cs
- HttpPostClientProtocol.cs
- StylusPointPropertyInfoDefaults.cs
- SystemThemeKey.cs
- ExpressionBindingCollection.cs
- HttpApplicationFactory.cs
- TextEditorTables.cs
- Utils.cs
- MeasurementDCInfo.cs
- TreeViewImageGenerator.cs
- PrintControllerWithStatusDialog.cs
- AutomationPeer.cs
- Monitor.cs
- EntitySetRetriever.cs
- HttpContext.cs
- Match.cs
- TransformPattern.cs
- DataSourceControl.cs
- DesignerTextWriter.cs
- SuppressIldasmAttribute.cs
- ValidationRuleCollection.cs
- ReadWriteObjectLock.cs
- BinaryFormatter.cs
- EntitySet.cs
- PropertyNames.cs
- HtmlToClrEventProxy.cs
- TextParagraphView.cs
- ToolStripDropDownClosingEventArgs.cs
- UriWriter.cs