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
- XmlAttributeAttribute.cs
- CompilationRelaxations.cs
- SqlDataReaderSmi.cs
- QilList.cs
- EmptyElement.cs
- Image.cs
- TcpAppDomainProtocolHandler.cs
- CompositeDesignerAccessibleObject.cs
- HealthMonitoringSection.cs
- ObjectDataSourceView.cs
- PersonalizableAttribute.cs
- EntityDesignerUtils.cs
- QueryResponse.cs
- HttpContextServiceHost.cs
- ModelUIElement3D.cs
- FlowNode.cs
- Operators.cs
- StaticContext.cs
- CompilerScope.Storage.cs
- COM2Properties.cs
- XPathScanner.cs
- NameNode.cs
- ConnectionPool.cs
- TabControlAutomationPeer.cs
- SystemDiagnosticsSection.cs
- SqlDataSourceStatusEventArgs.cs
- Scripts.cs
- TreeViewBindingsEditorForm.cs
- DataGridViewCellPaintingEventArgs.cs
- HostedNamedPipeTransportManager.cs
- SynchronizedChannelCollection.cs
- MessageFormatterConverter.cs
- DataGridViewCheckBoxColumn.cs
- HMACRIPEMD160.cs
- Exception.cs
- Command.cs
- HtmlElement.cs
- RootBrowserWindow.cs
- PenThreadPool.cs
- VScrollProperties.cs
- ClientScriptItemCollection.cs
- ColorConvertedBitmapExtension.cs
- Interlocked.cs
- AccessedThroughPropertyAttribute.cs
- AuthorizationSection.cs
- CurrencyWrapper.cs
- ReadOnlyDataSource.cs
- ToolboxDataAttribute.cs
- ColorConverter.cs
- ResolveCriteriaCD1.cs
- EmptyEnumerator.cs
- shaperfactoryquerycacheentry.cs
- HtmlTableCellCollection.cs
- X509Certificate2.cs
- ProcessModelInfo.cs
- MatrixConverter.cs
- HotSpot.cs
- ZipIOLocalFileDataDescriptor.cs
- PtsContext.cs
- NameValuePair.cs
- OleDbCommandBuilder.cs
- ReferenceEqualityComparer.cs
- PrinterSettings.cs
- SafeHandle.cs
- dtdvalidator.cs
- ProfilePropertyNameValidator.cs
- RMPublishingDialog.cs
- TreeNodeEventArgs.cs
- Line.cs
- Pointer.cs
- TreeNodeEventArgs.cs
- LiteralTextParser.cs
- PropertyConverter.cs
- XComponentModel.cs
- SerializationFieldInfo.cs
- HttpCookiesSection.cs
- Message.cs
- updateconfighost.cs
- EntityContainerAssociationSet.cs
- WindowsFormsHost.cs
- GeometryDrawing.cs
- CodeTypeParameterCollection.cs
- MsmqBindingElementBase.cs
- DbConnectionFactory.cs
- StorageTypeMapping.cs
- DependencyPropertyKind.cs
- MasterPageCodeDomTreeGenerator.cs
- AnnotationMap.cs
- ISAPIRuntime.cs
- DynamicResourceExtension.cs
- TableRowCollection.cs
- SingleObjectCollection.cs
- ConfigurationSettings.cs
- EventDescriptorCollection.cs
- XmlObjectSerializer.cs
- CurrentChangingEventManager.cs
- InvalidDocumentContentsException.cs
- PathParser.cs
- ThicknessAnimation.cs
- EntityProviderServices.cs