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
- StyleModeStack.cs
- SafeHandles.cs
- ProfileServiceManager.cs
- OutOfMemoryException.cs
- ContainsRowNumberChecker.cs
- TypeForwardedFromAttribute.cs
- connectionpool.cs
- DoubleAnimationUsingPath.cs
- MethodBody.cs
- MsmqChannelListenerBase.cs
- PackWebRequestFactory.cs
- FloaterBaseParaClient.cs
- _Semaphore.cs
- DesignerSerializationManager.cs
- OciEnlistContext.cs
- HtmlInputCheckBox.cs
- EntityDataSourceValidationException.cs
- PrincipalPermission.cs
- DBBindings.cs
- InvalidPrinterException.cs
- ProjectionRewriter.cs
- WindowsFormsSynchronizationContext.cs
- OletxTransactionFormatter.cs
- TextSerializer.cs
- FixedTextContainer.cs
- BamlTreeMap.cs
- PropertyChangedEventManager.cs
- StylusPointDescription.cs
- RequestResizeEvent.cs
- TemplateAction.cs
- CompModSwitches.cs
- GradientSpreadMethodValidation.cs
- EvidenceTypeDescriptor.cs
- FileUtil.cs
- PreProcessor.cs
- XmlSerializationGeneratedCode.cs
- localization.cs
- PropertyIDSet.cs
- ControlUtil.cs
- EditorPart.cs
- OletxTransactionManager.cs
- TextWriterEngine.cs
- XmlIgnoreAttribute.cs
- SchemaSetCompiler.cs
- StyleSheetDesigner.cs
- SelectionItemPattern.cs
- ConsumerConnectionPointCollection.cs
- __Filters.cs
- InputLanguageEventArgs.cs
- SnapLine.cs
- SuppressIldasmAttribute.cs
- ExpandedProjectionNode.cs
- XmlElementAttribute.cs
- TagPrefixCollection.cs
- SmtpException.cs
- IpcClientManager.cs
- RoutedPropertyChangedEventArgs.cs
- StringWriter.cs
- ClassHandlersStore.cs
- RegexWorker.cs
- TypeCodeDomSerializer.cs
- DmlSqlGenerator.cs
- PasswordBoxAutomationPeer.cs
- Bidi.cs
- WorkflowQueue.cs
- PathParser.cs
- AssemblySettingAttributes.cs
- HeaderUtility.cs
- SqlXml.cs
- TrailingSpaceComparer.cs
- XmlSchemaObject.cs
- Zone.cs
- FontWeights.cs
- SQLUtility.cs
- TextProviderWrapper.cs
- DockProviderWrapper.cs
- NavigationProperty.cs
- HuffCodec.cs
- SqlDependency.cs
- CLSCompliantAttribute.cs
- IntSecurity.cs
- InputLanguage.cs
- DemultiplexingClientMessageFormatter.cs
- TransactionChannelListener.cs
- ArgIterator.cs
- XPathAncestorIterator.cs
- Component.cs
- CdpEqualityComparer.cs
- CmsInterop.cs
- GrowingArray.cs
- WebUtil.cs
- RegexFCD.cs
- Perspective.cs
- OdbcCommandBuilder.cs
- TdsParserHelperClasses.cs
- RouteItem.cs
- DataBoundControlHelper.cs
- MailWebEventProvider.cs
- EventLogException.cs
- BooleanFunctions.cs