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
- ReadOnlyCollectionBuilder.cs
- Content.cs
- DbConnectionHelper.cs
- XmlUtil.cs
- RoleManagerModule.cs
- ContainerUIElement3D.cs
- ResourceExpressionEditorSheet.cs
- SoapCommonClasses.cs
- Matrix.cs
- XsdBuilder.cs
- RbTree.cs
- CopyCodeAction.cs
- ZipPackagePart.cs
- ForeignConstraint.cs
- XmlUrlResolver.cs
- ContextInformation.cs
- SHA512.cs
- Control.cs
- CodeTypeParameter.cs
- FlowLayout.cs
- NavigationEventArgs.cs
- DefaultPrintController.cs
- DrawingContext.cs
- MachineSettingsSection.cs
- ResourceManagerWrapper.cs
- SqlCacheDependencyDatabase.cs
- MenuItem.cs
- PreApplicationStartMethodAttribute.cs
- CompressionTransform.cs
- CheckBoxRenderer.cs
- DataTemplateSelector.cs
- SHA256.cs
- SqlDataSourceCommandParser.cs
- WindowsMenu.cs
- SystemNetHelpers.cs
- StatusBarDesigner.cs
- TextParagraphProperties.cs
- Margins.cs
- DataGridAddNewRow.cs
- RelationshipDetailsCollection.cs
- _SSPISessionCache.cs
- ImpersonationContext.cs
- BuiltInPermissionSets.cs
- QueryStatement.cs
- DataGridTablesFactory.cs
- SqlMethodTransformer.cs
- DataServiceRequestException.cs
- XmlLanguage.cs
- MD5HashHelper.cs
- ConfigurationValue.cs
- SessionStateUtil.cs
- DesignerVerbCollection.cs
- FreezableOperations.cs
- RtfControls.cs
- SafeProcessHandle.cs
- InheritablePropertyChangeInfo.cs
- RequestCachePolicy.cs
- ColorAnimationUsingKeyFrames.cs
- CmsInterop.cs
- ScriptMethodAttribute.cs
- RotateTransform.cs
- AspProxy.cs
- SystemIPInterfaceProperties.cs
- GridViewSelectEventArgs.cs
- RuntimeResourceSet.cs
- RangeExpression.cs
- ApplyTemplatesAction.cs
- DefaultHttpHandler.cs
- MimeMultiPart.cs
- DataBoundLiteralControl.cs
- SystemTcpConnection.cs
- _FtpDataStream.cs
- VirtualPath.cs
- RuntimeArgumentHandle.cs
- TextServicesProperty.cs
- SiteMap.cs
- RegexStringValidator.cs
- Dictionary.cs
- LayoutEditorPart.cs
- XmlMtomWriter.cs
- OracleTransaction.cs
- TearOffProxy.cs
- Span.cs
- Lookup.cs
- SqlUdtInfo.cs
- DatagridviewDisplayedBandsData.cs
- DBCommand.cs
- SerializationSectionGroup.cs
- PaintEvent.cs
- XmlSerializationGeneratedCode.cs
- CompilerCollection.cs
- RefreshEventArgs.cs
- OciLobLocator.cs
- XmlDocumentFieldSchema.cs
- RtfToXamlReader.cs
- SystemIcmpV6Statistics.cs
- XmlSchemaSimpleContent.cs
- EditingCommands.cs
- AnnouncementService.cs
- DataGridViewHitTestInfo.cs