Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Debugger / DebugController.cs / 1305376 / DebugController.cs
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------
namespace System.Activities.Debugger
{
using System;
using System.Activities.Hosting;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
using System.Runtime;
using System.Activities.Validation;
// DebugController, one is needed per ActivityExecutor.
[DebuggerNonUserCode]
class DebugController
{
WorkflowInstance host;
DebugManager debugManager; // Instantiated after first instrumentation is successful.
public DebugController(WorkflowInstance host)
{
this.host = host;
}
public void WorkflowStarted()
{
}
public void WorkflowCompleted()
{
if (this.debugManager != null)
{
this.debugManager.Exit();
this.debugManager = null;
}
}
public void ActivityStarted(ActivityInstance activityInstance)
{
if (!(activityInstance.Activity.RootActivity is Constraint)) // Don't debug an activity in a Constraint
{
EnsureActivityInstrumented(activityInstance, false);
this.debugManager.OnEnterState(activityInstance);
}
}
public void ActivityCompleted(ActivityInstance activityInstance)
{
if (!(activityInstance.Activity.RootActivity is Constraint)) // Don't debug an activity in a Constraint
{
EnsureActivityInstrumented(activityInstance, true);
this.debugManager.OnLeaveState(activityInstance);
}
}
// Lazy instrumentation.
// Parameter primeCurrentInstance specify whether priming (if needed) is done
// up to the current instance. Set this to true when calling this from an "...Completed"
// (exit state).
void EnsureActivityInstrumented(ActivityInstance instance, bool primeCurrentInstance)
{
if (this.debugManager == null)
{ // Workflow has not been instrumented yet.
// Finding rootInstance and check all referred sources.
Stack ancestors = new Stack();
while (instance.Parent != null)
{
ancestors.Push(instance);
instance = instance.Parent;
}
Activity rootActivity = instance.Activity;
// Do breakOnStartup only if debugger is attached from the beginning, i.e. no priming needed.
// This specified by change the last parameter below to: "(ancestors.Count == 0)".
this.debugManager = new DebugManager(rootActivity, "Workflow", "Workflow", "DebuggerThread", false, this.host, ancestors.Count == 0);
if (ancestors.Count > 0)
{
// Priming the background thread
this.debugManager.IsPriming = true;
while (ancestors.Count > 0)
{
ActivityInstance ancestorInstance = ancestors.Pop();
this.debugManager.OnEnterState(ancestorInstance);
}
if (primeCurrentInstance)
{
this.debugManager.OnEnterState(instance);
}
this.debugManager.IsPriming = false;
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RequiredFieldValidator.cs
- ResourcesChangeInfo.cs
- AsyncPostBackErrorEventArgs.cs
- HtmlButton.cs
- ContractCodeDomInfo.cs
- TakeQueryOptionExpression.cs
- _CacheStreams.cs
- HtmlHead.cs
- XPathDocumentBuilder.cs
- CachedFontFamily.cs
- CheckBoxDesigner.cs
- InternalBufferOverflowException.cs
- MenuBase.cs
- BaseTreeIterator.cs
- _SingleItemRequestCache.cs
- RuleSettings.cs
- DbConnectionPoolIdentity.cs
- EmissiveMaterial.cs
- ArrayTypeMismatchException.cs
- RenderOptions.cs
- DirectoryInfo.cs
- SafePointer.cs
- InkPresenterAutomationPeer.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- ContentControl.cs
- DependencyObjectType.cs
- DynamicRendererThreadManager.cs
- Opcode.cs
- printdlgexmarshaler.cs
- EncoderFallback.cs
- WindowsStartMenu.cs
- odbcmetadatacollectionnames.cs
- Splitter.cs
- WebConfigurationManager.cs
- LinqDataSourceEditData.cs
- TimelineGroup.cs
- BevelBitmapEffect.cs
- ReflectionPermission.cs
- BulletedListEventArgs.cs
- WebPartsSection.cs
- SkewTransform.cs
- XamlWriter.cs
- SystemDiagnosticsSection.cs
- SwitchLevelAttribute.cs
- ErrorLog.cs
- AssemblyHelper.cs
- ImmutableCommunicationTimeouts.cs
- CoTaskMemUnicodeSafeHandle.cs
- Brushes.cs
- StylusEditingBehavior.cs
- FixedSOMImage.cs
- DateTimeFormatInfo.cs
- TextServicesDisplayAttribute.cs
- BooleanAnimationBase.cs
- AutomationElement.cs
- ProvidersHelper.cs
- ExpandCollapsePattern.cs
- XmlUTF8TextWriter.cs
- ThumbButtonInfoCollection.cs
- UriExt.cs
- ClientSideProviderDescription.cs
- ScriptResourceAttribute.cs
- TraceEventCache.cs
- WindowsComboBox.cs
- SecurityState.cs
- FrameworkElement.cs
- SqlFactory.cs
- Package.cs
- XmlMembersMapping.cs
- CalendarAutoFormat.cs
- AnchorEditor.cs
- VisualBasicDesignerHelper.cs
- WebReferencesBuildProvider.cs
- SimpleType.cs
- UriTemplateTrieLocation.cs
- CheckedPointers.cs
- OutOfProcStateClientManager.cs
- NavigateUrlConverter.cs
- LicFileLicenseProvider.cs
- ContextTokenTypeConverter.cs
- BlobPersonalizationState.cs
- shaperfactoryquerycacheentry.cs
- ObjectPersistData.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- AxisAngleRotation3D.cs
- EntityDataSourceView.cs
- unsafeIndexingFilterStream.cs
- Reference.cs
- CompressEmulationStream.cs
- VirtualizingStackPanel.cs
- PerformanceCountersElement.cs
- HttpDebugHandler.cs
- ComplexPropertyEntry.cs
- Function.cs
- AssemblyContextControlItem.cs
- ProtocolInformationReader.cs
- XmlSchemaRedefine.cs
- webeventbuffer.cs
- SymLanguageVendor.cs
- HtmlUtf8RawTextWriter.cs