Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / RunTime / WorkflowQueue.cs / 1305376 / WorkflowQueue.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Workflow.ComponentModel; namespace System.Workflow.Runtime { public class WorkflowQueue { IComparable queueName; WorkflowQueuingService qService; internal WorkflowQueue(WorkflowQueuingService qService, IComparable queueName) { this.qService = qService; this.queueName = queueName; } public event EventHandlerQueueItemAvailable { add { if (value == null) throw new ArgumentNullException("value"); lock (qService.SyncRoot) { EventQueueState qState = qService.GetQueueState(this.queueName); ActivityExecutorDelegateInfo subscriber = new ActivityExecutorDelegateInfo (value, qService.CallingActivity); qState.AsynchronousListeners.Add(subscriber); WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "WorkflowQueue:QueueItemAvailable subscribe for activity '{0}' with context Id {1}", subscriber.ActivityQualifiedName, subscriber.ContextId); if (qState.AsynchronousListeners.Count == 1) qService.NotifyAsynchronousSubscribers(this.queueName, qState, qState.Messages.Count); } } remove { lock (qService.SyncRoot) { ActivityExecutorDelegateInfo subscriber = new ActivityExecutorDelegateInfo (value, qService.CallingActivity); bool removed = qService.GetQueueState(this.queueName).AsynchronousListeners.Remove(subscriber); if (!removed) { WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "WorkflowQueue:QueueItemAvailable unsubscribe failed for activity '{0}' with context Id {1} ", subscriber.ActivityQualifiedName, subscriber.ContextId); } } } } public void RegisterForQueueItemAvailable(IActivityEventListener eventListener) { RegisterForQueueItemAvailable(eventListener, null); } public void RegisterForQueueItemAvailable(IActivityEventListener eventListener, string subscriberQualifiedName) { if (eventListener == null) throw new ArgumentNullException("eventListener"); lock (qService.SyncRoot) { EventQueueState qState = qService.GetQueueState(this.queueName); ActivityExecutorDelegateInfo subscriber = new ActivityExecutorDelegateInfo (eventListener, qService.CallingActivity); if (subscriberQualifiedName != null) { subscriber.SubscribedActivityQualifiedName = subscriberQualifiedName; } qState.AsynchronousListeners.Add(subscriber); WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "WorkflowQueue:QueueItemAvailable subscribe for activity '{0}' with context Id {1}", subscriber.ActivityQualifiedName, subscriber.ContextId); if (qState.AsynchronousListeners.Count == 1) qService.NotifyAsynchronousSubscribers(this.queueName, qState, qState.Messages.Count); } } public void UnregisterForQueueItemAvailable(IActivityEventListener eventListener) { if (eventListener == null) throw new ArgumentNullException("eventListener"); lock (qService.SyncRoot) { ActivityExecutorDelegateInfo subscriber = new ActivityExecutorDelegateInfo (eventListener, qService.CallingActivity); bool removed = qService.GetQueueState(this.queueName).AsynchronousListeners.Remove(subscriber); if (!removed) { WorkflowTrace.Runtime.TraceEvent(TraceEventType.Information, 0, "WorkflowQueue:QueueItemAvailable unsubscribe failed for activity '{0}' with context Id {1}", subscriber.ActivityQualifiedName, subscriber.ContextId); } } } public event EventHandler QueueItemArrived { add { if (value == null) throw new ArgumentNullException("value"); lock (qService.SyncRoot) { qService.GetQueueState(this.queueName).SynchronousListeners.Add(new ActivityExecutorDelegateInfo (value, qService.CallingActivity)); } } remove { if (value == null) throw new ArgumentNullException("value"); lock (qService.SyncRoot) { qService.GetQueueState(this.queueName).SynchronousListeners.Remove(new ActivityExecutorDelegateInfo (value, qService.CallingActivity)); } } } public void RegisterForQueueItemArrived(IActivityEventListener eventListener) { if (eventListener == null) throw new ArgumentNullException("eventListener"); lock (qService.SyncRoot) { qService.GetQueueState(this.queueName).SynchronousListeners.Add(new ActivityExecutorDelegateInfo (eventListener, qService.CallingActivity)); } } public void UnregisterForQueueItemArrived(IActivityEventListener eventListener) { if (eventListener == null) throw new ArgumentNullException("eventListener"); lock (qService.SyncRoot) { qService.GetQueueState(this.queueName).SynchronousListeners.Remove(new ActivityExecutorDelegateInfo (eventListener, qService.CallingActivity)); } } public IComparable QueueName { get { return this.queueName; } } public WorkflowQueuingService QueuingService { get { return this.qService; } } public void Enqueue(object item) { lock (qService.SyncRoot) { qService.EnqueueEvent(this.queueName, item); } } public object Dequeue() { lock (qService.SyncRoot) { object message = qService.Peek(this.queueName); return qService.DequeueEvent(this.queueName); } } public object Peek() { lock (qService.SyncRoot) { object message = qService.Peek(this.queueName); return message; } } public int Count { get { lock (qService.SyncRoot) { return this.qService.GetQueueState(this.queueName).Messages.Count; } } } public bool Enabled { get { lock (qService.SyncRoot) { return this.qService.GetQueueState(this.queueName).Enabled; } } set { lock (qService.SyncRoot) { this.qService.GetQueueState(this.queueName).Enabled = value; } } } } } // 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
- ClientSponsor.cs
- JavaScriptObjectDeserializer.cs
- SizeConverter.cs
- HtmlForm.cs
- Int32EqualityComparer.cs
- BoolExpr.cs
- ConnectionOrientedTransportChannelFactory.cs
- COMException.cs
- ValueExpressions.cs
- AdobeCFFWrapper.cs
- TableLayoutPanelCodeDomSerializer.cs
- StyleBamlRecordReader.cs
- HttpRuntime.cs
- Vector3DAnimationBase.cs
- ObjectMemberMapping.cs
- Convert.cs
- DescendentsWalker.cs
- Events.cs
- RawTextInputReport.cs
- Margins.cs
- SemanticResultKey.cs
- XNodeSchemaApplier.cs
- IDQuery.cs
- SqlLiftWhereClauses.cs
- SqlPersistenceWorkflowInstanceDescription.cs
- ContractHandle.cs
- PropertyBuilder.cs
- Inline.cs
- MultiTouchSystemGestureLogic.cs
- UserInitiatedNavigationPermission.cs
- SequenceDesigner.cs
- Rectangle.cs
- DataTransferEventArgs.cs
- TemplateXamlParser.cs
- EntitySqlQueryCacheEntry.cs
- XmlArrayItemAttributes.cs
- SrgsGrammarCompiler.cs
- WorkflowViewElement.cs
- XamlStream.cs
- DelegateTypeInfo.cs
- XPathEmptyIterator.cs
- CacheAxisQuery.cs
- SafeArrayTypeMismatchException.cs
- TileBrush.cs
- SpecularMaterial.cs
- Serializer.cs
- XmlNamedNodeMap.cs
- HttpPostedFile.cs
- CustomAttributeSerializer.cs
- Size3D.cs
- DataChangedEventManager.cs
- FontCollection.cs
- TransformGroup.cs
- XmlJsonWriter.cs
- Synchronization.cs
- DbConnectionPoolOptions.cs
- WebPartConnectionsEventArgs.cs
- ChangePasswordAutoFormat.cs
- BinaryParser.cs
- ProjectionPruner.cs
- XmlEncodedRawTextWriter.cs
- ShutDownListener.cs
- ServicePoint.cs
- ToolStripSystemRenderer.cs
- RegionInfo.cs
- SystemMulticastIPAddressInformation.cs
- ProvideValueServiceProvider.cs
- ContainerParaClient.cs
- Win32PrintDialog.cs
- AccessKeyManager.cs
- DataGridViewRowHeaderCell.cs
- TypeReference.cs
- WebPartHeaderCloseVerb.cs
- LogicalMethodInfo.cs
- RegexNode.cs
- MetadataSection.cs
- LogExtent.cs
- XMLSchema.cs
- TextTreeInsertUndoUnit.cs
- ContainerUIElement3D.cs
- InterleavedZipPartStream.cs
- SessionParameter.cs
- ToolZone.cs
- MethodToken.cs
- BitArray.cs
- XmlSchemaElement.cs
- Root.cs
- ReturnType.cs
- DynamicQueryableWrapper.cs
- Psha1DerivedKeyGenerator.cs
- RequestTimeoutManager.cs
- _Semaphore.cs
- MarkupProperty.cs
- SimpleParser.cs
- ProfileGroupSettings.cs
- CorrelationQuery.cs
- TransactionFlowBindingElement.cs
- TypeReference.cs
- ConfigXmlSignificantWhitespace.cs
- EncoderParameter.cs