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
- PersonalizationAdministration.cs
- LocalIdKeyIdentifierClause.cs
- SignedXml.cs
- TileModeValidation.cs
- HtmlInputReset.cs
- DeploymentExceptionMapper.cs
- PeerPresenceInfo.cs
- XmlSchemaSimpleTypeUnion.cs
- DataSetSchema.cs
- TypeContext.cs
- TextOnlyOutput.cs
- MultiTrigger.cs
- Behavior.cs
- ObjectItemCachedAssemblyLoader.cs
- followingquery.cs
- ContextMenuAutomationPeer.cs
- EntryPointNotFoundException.cs
- ModulesEntry.cs
- StyleHelper.cs
- Variable.cs
- EntitySet.cs
- JsonUriDataContract.cs
- CaretElement.cs
- SynchronizedDispatch.cs
- ManagementOptions.cs
- ToolStripOverflow.cs
- WebAdminConfigurationHelper.cs
- ThemeInfoAttribute.cs
- ListViewGroupConverter.cs
- RenderDataDrawingContext.cs
- RadioButton.cs
- TextRangeEditTables.cs
- DiscoveryClientRequestChannel.cs
- OpenTypeCommon.cs
- EditorZoneDesigner.cs
- CommonProperties.cs
- SqlDataReaderSmi.cs
- HttpRuntime.cs
- PrimitiveCodeDomSerializer.cs
- RayHitTestParameters.cs
- MenuItemAutomationPeer.cs
- Matrix.cs
- BrushValueSerializer.cs
- XmlDataDocument.cs
- OdbcConnectionStringbuilder.cs
- TextTrailingWordEllipsis.cs
- HttpContext.cs
- IDQuery.cs
- TextClipboardData.cs
- ReachBasicContext.cs
- XmlAnyElementAttributes.cs
- SmtpCommands.cs
- MessageLoggingFilterTraceRecord.cs
- ParseElementCollection.cs
- CheckoutException.cs
- Deflater.cs
- SynchronizedReadOnlyCollection.cs
- ButtonChrome.cs
- _NestedSingleAsyncResult.cs
- MimeObjectFactory.cs
- SimpleBitVector32.cs
- ITextView.cs
- filewebrequest.cs
- Set.cs
- SqlDataReader.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- WindowsPen.cs
- SourceElementsCollection.cs
- PageContentCollection.cs
- Message.cs
- oledbmetadatacolumnnames.cs
- Menu.cs
- CommandEventArgs.cs
- OdbcError.cs
- Variant.cs
- AutomationPattern.cs
- IfAction.cs
- SequenceDesigner.cs
- XmlQueryStaticData.cs
- GlyphInfoList.cs
- MobileRedirect.cs
- FixUpCollection.cs
- FileDetails.cs
- BasePropertyDescriptor.cs
- ClientApiGenerator.cs
- XmlDictionaryReader.cs
- StagingAreaInputItem.cs
- UniqueConstraint.cs
- DiscoveryClientBindingElement.cs
- ProfileManager.cs
- SafeSecurityHandles.cs
- UnSafeCharBuffer.cs
- WeakRefEnumerator.cs
- FlowLayout.cs
- UnauthorizedAccessException.cs
- pingexception.cs
- FacetEnabledSchemaElement.cs
- CodeFieldReferenceExpression.cs
- OleCmdHelper.cs
- BinaryFormatterSinks.cs