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
- prefixendpointaddressmessagefilter.cs
- WeakHashtable.cs
- SerTrace.cs
- EntityDataSourceView.cs
- BamlLocalizableResource.cs
- MonikerHelper.cs
- DispatcherEventArgs.cs
- DataGridViewRowHeaderCell.cs
- PrivateFontCollection.cs
- HttpRequest.cs
- TextTreeNode.cs
- EntityDataSourceValidationException.cs
- TreeIterator.cs
- RoleService.cs
- QueuePathDialog.cs
- AssemblyBuilder.cs
- Wildcard.cs
- PersonalizationDictionary.cs
- XmlDataSourceNodeDescriptor.cs
- MetadataProperty.cs
- InkPresenterAutomationPeer.cs
- DataTemplate.cs
- HwndSourceParameters.cs
- PasswordRecoveryAutoFormat.cs
- VirtualPath.cs
- BindingContext.cs
- DesignParameter.cs
- DisplayNameAttribute.cs
- Comparer.cs
- XmlAttributeOverrides.cs
- CancelEventArgs.cs
- ConsoleKeyInfo.cs
- RecognitionResult.cs
- QuaternionAnimation.cs
- Scripts.cs
- SimpleFieldTemplateFactory.cs
- ToolStripContainer.cs
- HttpCookiesSection.cs
- ThreadPool.cs
- KoreanLunisolarCalendar.cs
- RowToParametersTransformer.cs
- DeferredTextReference.cs
- CleanUpVirtualizedItemEventArgs.cs
- TouchDevice.cs
- ExtendedPropertyDescriptor.cs
- KnownAssembliesSet.cs
- EntityDesignerDataSourceView.cs
- ADMembershipProvider.cs
- Rotation3DAnimationBase.cs
- ContentWrapperAttribute.cs
- TreeNodeCollection.cs
- RNGCryptoServiceProvider.cs
- DependencyPropertyChangedEventArgs.cs
- CngProvider.cs
- PersonalizableAttribute.cs
- ExpandedWrapper.cs
- MimeAnyImporter.cs
- XmlValidatingReader.cs
- DependencyObjectProvider.cs
- TreeViewCancelEvent.cs
- KeyValuePairs.cs
- SessionEndedEventArgs.cs
- BoundColumn.cs
- NodeFunctions.cs
- TreeNodeConverter.cs
- StringOutput.cs
- PolyQuadraticBezierSegment.cs
- XamlFilter.cs
- ProviderConnectionPointCollection.cs
- WebBrowserHelper.cs
- _NestedSingleAsyncResult.cs
- XmlTextAttribute.cs
- MenuCommand.cs
- DrawingImage.cs
- Nodes.cs
- CryptoStream.cs
- ScrollBar.cs
- ConcurrentBag.cs
- CompoundFileIOPermission.cs
- QueryContinueDragEventArgs.cs
- SmiRequestExecutor.cs
- FunctionMappingTranslator.cs
- Animatable.cs
- LoggedException.cs
- DataTransferEventArgs.cs
- VerificationException.cs
- CounterSampleCalculator.cs
- DataStreams.cs
- DoubleAverageAggregationOperator.cs
- EdmTypeAttribute.cs
- CodeGenerator.cs
- HtmlInputControl.cs
- TTSEvent.cs
- SafeThreadHandle.cs
- XsltConvert.cs
- SuspendDesigner.cs
- SoapReflector.cs
- RegistryConfigurationProvider.cs
- SafeLibraryHandle.cs
- MenuEventArgs.cs