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
- EncryptedKeyIdentifierClause.cs
- RSAPKCS1SignatureDeformatter.cs
- SmtpException.cs
- Helper.cs
- FusionWrap.cs
- CharAnimationBase.cs
- KnownTypeAttribute.cs
- EdgeModeValidation.cs
- cookie.cs
- ColorAnimationBase.cs
- ToolboxComponentsCreatedEventArgs.cs
- Padding.cs
- Lease.cs
- CodeSubDirectory.cs
- InternalCompensate.cs
- ScrollBarAutomationPeer.cs
- ToolBarPanel.cs
- MdiWindowListStrip.cs
- ControlBuilderAttribute.cs
- RotationValidation.cs
- CssStyleCollection.cs
- NavigationFailedEventArgs.cs
- PopupEventArgs.cs
- HttpListenerException.cs
- FloatMinMaxAggregationOperator.cs
- EncryptedPackageFilter.cs
- WrappedIUnknown.cs
- RectangleHotSpot.cs
- DictionarySectionHandler.cs
- XmlCharType.cs
- TextPatternIdentifiers.cs
- SizeAnimation.cs
- Converter.cs
- AuthenticationConfig.cs
- SqlProcedureAttribute.cs
- FrameSecurityDescriptor.cs
- UIHelper.cs
- ObjectHandle.cs
- AssemblyBuilder.cs
- PropertyMapper.cs
- DictionaryEditChange.cs
- CustomValidator.cs
- SystemUdpStatistics.cs
- ExternalException.cs
- OrElse.cs
- DrawingGroup.cs
- ConfigXmlCDataSection.cs
- OutOfMemoryException.cs
- BindingContext.cs
- ObjectParameterCollection.cs
- XamlDesignerSerializationManager.cs
- ContainerParagraph.cs
- XPathMultyIterator.cs
- MailAddress.cs
- CacheEntry.cs
- ListBoxItemWrapperAutomationPeer.cs
- ParameterExpression.cs
- WebHttpBindingElement.cs
- ColumnReorderedEventArgs.cs
- OrderByExpression.cs
- SymLanguageVendor.cs
- FrameDimension.cs
- ExtendedPropertyDescriptor.cs
- UpdateRecord.cs
- Padding.cs
- SqlEnums.cs
- ScriptResourceMapping.cs
- CqlQuery.cs
- ApplicationFileCodeDomTreeGenerator.cs
- UnknownBitmapEncoder.cs
- HostingEnvironment.cs
- EmbeddedMailObjectsCollection.cs
- PageTrueTypeFont.cs
- StateInitializationDesigner.cs
- LocalizedNameDescriptionPair.cs
- SendMailErrorEventArgs.cs
- Accessible.cs
- ContravarianceAdapter.cs
- AutomationElement.cs
- XmlQualifiedName.cs
- SqlAliaser.cs
- QueryRewriter.cs
- ReadOnlyDictionary.cs
- PerformanceCounterScope.cs
- UserPreferenceChangedEventArgs.cs
- DataMisalignedException.cs
- SelectionHighlightInfo.cs
- AstTree.cs
- SafeNativeMethods.cs
- SecurityTokenProvider.cs
- UnsafeNativeMethods.cs
- WebUtil.cs
- SocketAddress.cs
- LocalizationComments.cs
- DataGridViewCellStyleChangedEventArgs.cs
- HttpInputStream.cs
- SelectionHighlightInfo.cs
- ToolZone.cs
- SimpleHandlerFactory.cs
- RadioButtonPopupAdapter.cs