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
- PseudoWebRequest.cs
- FormViewDeletedEventArgs.cs
- LocatorBase.cs
- MasterPageParser.cs
- ArraySegment.cs
- Perspective.cs
- GridView.cs
- ImageAutomationPeer.cs
- XmlObjectSerializerReadContextComplexJson.cs
- DbConnectionFactory.cs
- GridViewSortEventArgs.cs
- TextTreeTextBlock.cs
- XmlSchemaComplexType.cs
- MexTcpBindingElement.cs
- CompilationUtil.cs
- CryptoStream.cs
- SchemaImporterExtension.cs
- RoleGroupCollection.cs
- ToolStripSeparator.cs
- RecipientInfo.cs
- documentsequencetextcontainer.cs
- Lease.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- Timer.cs
- CodeGenerationManager.cs
- WindowsListViewGroup.cs
- CompositeFontParser.cs
- MissingMethodException.cs
- SqlClientFactory.cs
- PathFigureCollectionValueSerializer.cs
- ExtensionFile.cs
- FormatterServices.cs
- XmlElementAttribute.cs
- BezierSegment.cs
- BulletChrome.cs
- BindingOperations.cs
- TextParagraphView.cs
- PageEventArgs.cs
- ChtmlCalendarAdapter.cs
- XmlToDatasetMap.cs
- CodeTypeReference.cs
- WorkflowMarkupSerializationException.cs
- WSMessageEncoding.cs
- AutomationPropertyInfo.cs
- SchemaManager.cs
- XmlElementAttributes.cs
- ListBindingConverter.cs
- TransportContext.cs
- LinkTarget.cs
- FileVersionInfo.cs
- OracleParameter.cs
- DriveInfo.cs
- AttributeTableBuilder.cs
- XmlMembersMapping.cs
- DummyDataSource.cs
- BindingRestrictions.cs
- typedescriptorpermission.cs
- Opcode.cs
- PlanCompiler.cs
- JpegBitmapEncoder.cs
- ClearTypeHintValidation.cs
- X509ChainElement.cs
- InvokeMethod.cs
- GB18030Encoding.cs
- JapaneseCalendar.cs
- KoreanCalendar.cs
- CategoryNameCollection.cs
- TreeChangeInfo.cs
- DbExpressionRules.cs
- ScriptingSectionGroup.cs
- Section.cs
- GridViewRow.cs
- ValidateNames.cs
- ManipulationDelta.cs
- RepeaterItemCollection.cs
- PersonalizationStateInfoCollection.cs
- RoutedEventHandlerInfo.cs
- CodeDomConfigurationHandler.cs
- SizeAnimationClockResource.cs
- IntSecurity.cs
- CodeEntryPointMethod.cs
- Size3D.cs
- GridView.cs
- PatternMatcher.cs
- RuntimeEnvironment.cs
- TargetParameterCountException.cs
- ByteStreamGeometryContext.cs
- Section.cs
- WS2007FederationHttpBindingCollectionElement.cs
- FrameAutomationPeer.cs
- XmlElementList.cs
- LayoutEngine.cs
- EntityViewGenerationConstants.cs
- HyperLinkStyle.cs
- LocationUpdates.cs
- DesignerUtility.cs
- InvalidProgramException.cs
- AttachedPropertyMethodSelector.cs
- GenericEnumConverter.cs
- Stack.cs