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
- DataTableMappingCollection.cs
- BoolExpressionVisitors.cs
- PolicyException.cs
- DataSourceHelper.cs
- DesignerObjectListAdapter.cs
- ProviderConnectionPointCollection.cs
- HtmlHistory.cs
- ParameterElementCollection.cs
- OleDbSchemaGuid.cs
- ItemsControlAutomationPeer.cs
- NativeCppClassAttribute.cs
- RandomDelaySendsAsyncResult.cs
- XPathExpr.cs
- GeneralTransformGroup.cs
- BookmarkNameHelper.cs
- Int64AnimationUsingKeyFrames.cs
- Drawing.cs
- ReverseInheritProperty.cs
- GacUtil.cs
- ComponentDispatcher.cs
- XmlSchemaSet.cs
- BasicCellRelation.cs
- TripleDES.cs
- DeviceFiltersSection.cs
- MetadataItemEmitter.cs
- BrushConverter.cs
- DriveInfo.cs
- DecimalSumAggregationOperator.cs
- ClickablePoint.cs
- TextParaClient.cs
- ManualResetEvent.cs
- DBSqlParserColumn.cs
- RichListBox.cs
- SqlCharStream.cs
- PathSegment.cs
- NaturalLanguageHyphenator.cs
- WindowsServiceElement.cs
- ProfileGroupSettings.cs
- ResizeGrip.cs
- PersonalizationProviderHelper.cs
- DllNotFoundException.cs
- VisualBrush.cs
- DtdParser.cs
- BitmapEffectRenderDataResource.cs
- XPathNavigator.cs
- RegistryPermission.cs
- QueryAccessibilityHelpEvent.cs
- Storyboard.cs
- XmlSequenceWriter.cs
- PrivilegedConfigurationManager.cs
- RenderDataDrawingContext.cs
- BulletedListEventArgs.cs
- XomlCompilerResults.cs
- DBSqlParserTable.cs
- DataPagerFieldItem.cs
- SetStoryboardSpeedRatio.cs
- BackStopAuthenticationModule.cs
- NotifyInputEventArgs.cs
- DebugHandleTracker.cs
- _LoggingObject.cs
- SourceFileBuildProvider.cs
- TabletCollection.cs
- Config.cs
- MobileTextWriter.cs
- _ConnectOverlappedAsyncResult.cs
- FileDialog_Vista_Interop.cs
- DataContract.cs
- SignedPkcs7.cs
- StrongNamePublicKeyBlob.cs
- CustomBindingElement.cs
- BridgeDataReader.cs
- Rect3D.cs
- RegexReplacement.cs
- SimpleWorkerRequest.cs
- FtpWebRequest.cs
- GACIdentityPermission.cs
- CounterCreationData.cs
- ProxyElement.cs
- DateBoldEvent.cs
- ParameterCollection.cs
- SafeProcessHandle.cs
- ListViewAutomationPeer.cs
- UIElement.cs
- BooleanExpr.cs
- TextFindEngine.cs
- JumpTask.cs
- AxisAngleRotation3D.cs
- NonVisualControlAttribute.cs
- EndpointIdentity.cs
- XmlSortKey.cs
- BamlWriter.cs
- ManagedIStream.cs
- RowToParametersTransformer.cs
- ErrorHandler.cs
- InvalidProgramException.cs
- FirstMatchCodeGroup.cs
- FullTextState.cs
- TypeDelegator.cs
- ValidationVisibilityAttribute.cs
- UIPropertyMetadata.cs