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
- BuildResultCache.cs
- EntityDataSource.cs
- _PooledStream.cs
- PropertyEmitterBase.cs
- PermissionSet.cs
- GiveFeedbackEvent.cs
- HttpCookiesSection.cs
- TemplateApplicationHelper.cs
- InvokeCompletedEventArgs.cs
- Cursor.cs
- WindowsEditBoxRange.cs
- MemberHolder.cs
- ReadOnlyCollection.cs
- IdnElement.cs
- TypeGeneratedEventArgs.cs
- XDRSchema.cs
- AttributedMetaModel.cs
- IdleTimeoutMonitor.cs
- UnsafeNativeMethods.cs
- ActiveXSite.cs
- AtlasWeb.Designer.cs
- Stroke.cs
- FastEncoder.cs
- Header.cs
- _AuthenticationState.cs
- Int64Animation.cs
- SqlRetyper.cs
- ExpressionBuilder.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- BaseComponentEditor.cs
- pingexception.cs
- EntityDataSourceContextDisposingEventArgs.cs
- CodeGen.cs
- XmlSchemaAttribute.cs
- CacheDict.cs
- TransformerInfoCollection.cs
- ipaddressinformationcollection.cs
- HwndTarget.cs
- BamlVersionHeader.cs
- MetadataException.cs
- ClosableStream.cs
- ProviderSettings.cs
- SurrogateSelector.cs
- RayHitTestParameters.cs
- ImageFormatConverter.cs
- DataViewManager.cs
- Icon.cs
- ListMarkerSourceInfo.cs
- ClientSettingsStore.cs
- SmtpMail.cs
- sortedlist.cs
- DetailsViewRowCollection.cs
- SHA384.cs
- OracleException.cs
- OdbcConnectionFactory.cs
- Splitter.cs
- PageSetupDialog.cs
- Geometry3D.cs
- Separator.cs
- EntityWrapperFactory.cs
- UserControl.cs
- WebOperationContext.cs
- JsonDataContract.cs
- precedingquery.cs
- Point.cs
- XmlAnyElementAttributes.cs
- BindingNavigator.cs
- InfiniteTimeSpanConverter.cs
- ReadOnlyHierarchicalDataSourceView.cs
- BaseProcessor.cs
- AnnotationResource.cs
- SimpleBitVector32.cs
- WebBrowserProgressChangedEventHandler.cs
- FigureParagraph.cs
- StreamWithDictionary.cs
- CalendarKeyboardHelper.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- BinaryParser.cs
- ApplicationSecurityManager.cs
- PlatformCulture.cs
- NumberSubstitution.cs
- HttpConfigurationContext.cs
- TextServicesProperty.cs
- Dump.cs
- PopupRoot.cs
- ConstraintStruct.cs
- TextEditorDragDrop.cs
- ColumnReorderedEventArgs.cs
- SqlConnectionString.cs
- SqlProvider.cs
- RestHandler.cs
- ViewSimplifier.cs
- TreeNodeConverter.cs
- ProviderConnectionPointCollection.cs
- TransportBindingElementImporter.cs
- TempEnvironment.cs
- TransformGroup.cs
- UnsafeNativeMethods.cs
- TextHidden.cs
- WindowsFormsHelpers.cs