Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / Delay.cs / 1305376 / Delay.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.Activities.Statements
{
using System;
using System.Activities;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime;
using System.Windows.Markup;
[ContentProperty("Duration")]
public sealed class Delay : NativeActivity
{
static Func getDefaultTimerExtension = new Func(GetDefaultTimerExtension);
Variable timerBookmark;
public Delay()
: base()
{
this.timerBookmark = new Variable();
}
[RequiredArgument]
[DefaultValue(null)]
public InArgument Duration
{
get;
set;
}
protected override bool CanInduceIdle
{
get
{
return true;
}
}
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
RuntimeArgument durationArgument = new RuntimeArgument("Duration", typeof(TimeSpan), ArgumentDirection.In, true);
metadata.Bind(this.Duration, durationArgument);
metadata.SetArgumentsCollection(new Collection { durationArgument });
metadata.AddImplementationVariable(this.timerBookmark);
metadata.AddDefaultExtensionProvider(getDefaultTimerExtension);
}
static TimerExtension GetDefaultTimerExtension()
{
return new DurableTimerExtension();
}
protected override void Execute(NativeActivityContext context)
{
TimeSpan duration = this.Duration.Get(context);
if (duration < TimeSpan.Zero)
{
throw FxTrace.Exception.ArgumentOutOfRange("Duration", duration, SR.DurationIsNegative(this.DisplayName));
}
if (duration == TimeSpan.Zero)
{
return;
}
TimerExtension timerExtension = GetTimerExtension(context);
Bookmark bookmark = context.CreateBookmark();
timerExtension.RegisterTimer(duration, bookmark);
this.timerBookmark.Set(context, bookmark);
}
protected override void Cancel(NativeActivityContext context)
{
Bookmark timerBookmark = this.timerBookmark.Get(context);
TimerExtension timerExtension = GetTimerExtension(context);
timerExtension.CancelTimer(timerBookmark);
context.RemoveBookmark(timerBookmark);
context.MarkCanceled();
}
protected override void Abort(NativeActivityAbortContext context)
{
Bookmark timerBookmark = this.timerBookmark.Get(context);
// The bookmark could be null in abort when user passed in a negative delay as a duration
if (timerBookmark != null)
{
TimerExtension timerExtension = GetTimerExtension(context);
timerExtension.CancelTimer(timerBookmark);
}
base.Abort(context);
}
TimerExtension GetTimerExtension(ActivityContext context)
{
TimerExtension timerExtension = context.GetExtension();
Fx.Assert(timerExtension != null, "TimerExtension must exist.");
return timerExtension;
}
}
}
// 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
- SerializationSectionGroup.cs
- LinkTarget.cs
- TypeDescriptor.cs
- StatusBarPanelClickEvent.cs
- InputElement.cs
- Selector.cs
- BaseCollection.cs
- Pen.cs
- HtmlDocument.cs
- HtmlInputText.cs
- CompModHelpers.cs
- ReadOnlyMetadataCollection.cs
- ScaleTransform3D.cs
- MatrixAnimationUsingKeyFrames.cs
- MasterPage.cs
- MatrixCamera.cs
- SingleAnimationUsingKeyFrames.cs
- DesignerLabelAdapter.cs
- ActivityExecutionContext.cs
- DataSourceCache.cs
- PngBitmapEncoder.cs
- DateTimeUtil.cs
- FileUtil.cs
- WpfPayload.cs
- CollectionChangedEventManager.cs
- ThrowHelper.cs
- Rect3D.cs
- WindowsTab.cs
- OutKeywords.cs
- GeometryGroup.cs
- DesignColumn.cs
- ComponentConverter.cs
- jithelpers.cs
- XmlSerializer.cs
- LayoutEvent.cs
- DesignerView.xaml.cs
- dbdatarecord.cs
- ExtentKey.cs
- ConsoleTraceListener.cs
- BamlBinaryReader.cs
- HostProtectionPermission.cs
- CompensateDesigner.cs
- ContentType.cs
- BaseValidator.cs
- ToolStripScrollButton.cs
- XmlElementElementCollection.cs
- PropertyIDSet.cs
- ApplicationGesture.cs
- HtmlInputButton.cs
- SevenBitStream.cs
- GenericEnumerator.cs
- SharedDp.cs
- UriParserTemplates.cs
- XmlAutoDetectWriter.cs
- QualifiedCellIdBoolean.cs
- Margins.cs
- MULTI_QI.cs
- FilteredReadOnlyMetadataCollection.cs
- RouteItem.cs
- Select.cs
- StrokeNodeOperations2.cs
- IPGlobalProperties.cs
- EventLevel.cs
- TargetInvocationException.cs
- DataTableReaderListener.cs
- FormView.cs
- listitem.cs
- OAVariantLib.cs
- TaskFileService.cs
- PeekCompletedEventArgs.cs
- XmlSchemaComplexContent.cs
- ColumnWidthChangedEvent.cs
- ReflectionUtil.cs
- DataGridViewCellCollection.cs
- SimpleTextLine.cs
- GridView.cs
- TemplateControlCodeDomTreeGenerator.cs
- InputBinder.cs
- ColorBlend.cs
- arclist.cs
- EventMappingSettings.cs
- ReadingWritingEntityEventArgs.cs
- UserControl.cs
- QuadraticBezierSegment.cs
- SoapElementAttribute.cs
- DefaultEventAttribute.cs
- objectresult_tresulttype.cs
- WebPartEditorCancelVerb.cs
- SlipBehavior.cs
- TabRenderer.cs
- DataReceivedEventArgs.cs
- ByteRangeDownloader.cs
- HtmlTableRowCollection.cs
- VirtualPathProvider.cs
- CellPartitioner.cs
- EpmCustomContentSerializer.cs
- DesignerToolStripControlHost.cs
- DataException.cs
- MailFileEditor.cs
- DispatcherEventArgs.cs