Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------ // 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 EventHandler QueueItemAvailable { 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
- ImageMetadata.cs
- ManualResetEvent.cs
- SafePEFileHandle.cs
- FixUpCollection.cs
- DetailsViewDeletedEventArgs.cs
- XmlFormatWriterGenerator.cs
- TextEmbeddedObject.cs
- TreeViewItemAutomationPeer.cs
- __Error.cs
- TouchDevice.cs
- XmlSchemaValidationException.cs
- OneOfConst.cs
- HTMLTagNameToTypeMapper.cs
- VisualStyleInformation.cs
- InvalidEnumArgumentException.cs
- TrackingMemoryStream.cs
- Rect3D.cs
- VariableDesigner.xaml.cs
- DefaultTextStore.cs
- Repeater.cs
- infer.cs
- DataGridViewColumnCollection.cs
- ISessionStateStore.cs
- MetadataProperty.cs
- ObjectViewFactory.cs
- IISUnsafeMethods.cs
- ExtenderControl.cs
- RoutedEventArgs.cs
- XmlUtil.cs
- SmtpMail.cs
- XmlSchemaAnnotated.cs
- JsonFormatWriterGenerator.cs
- BitArray.cs
- RevocationPoint.cs
- RawKeyboardInputReport.cs
- EventLogEntry.cs
- XmlPreloadedResolver.cs
- cryptoapiTransform.cs
- LoadWorkflowByKeyAsyncResult.cs
- DataGridTemplateColumn.cs
- TextElement.cs
- XPathDocumentNavigator.cs
- ProfileModule.cs
- MSHTMLHost.cs
- X509Chain.cs
- ContainerParagraph.cs
- WebProxyScriptElement.cs
- Visitor.cs
- SplitContainer.cs
- OLEDB_Util.cs
- XmlIncludeAttribute.cs
- MeshGeometry3D.cs
- DataViewSetting.cs
- DataSetMappper.cs
- COM2FontConverter.cs
- TextSpanModifier.cs
- ObjectDisposedException.cs
- FormViewDeleteEventArgs.cs
- ParameterCollection.cs
- EnumerableRowCollectionExtensions.cs
- UnauthorizedWebPart.cs
- ColumnWidthChangedEvent.cs
- XmlNodeChangedEventManager.cs
- InstanceHandleConflictException.cs
- FrameworkRichTextComposition.cs
- XmlSchemaObjectTable.cs
- VerificationException.cs
- CodeObjectCreateExpression.cs
- XmlUnspecifiedAttribute.cs
- DbConnectionPoolGroup.cs
- EntityDataSource.cs
- ImageList.cs
- UnlockCardRequest.cs
- DataSetMappper.cs
- DecimalAnimationUsingKeyFrames.cs
- SingleAnimation.cs
- ScriptControlDescriptor.cs
- LineMetrics.cs
- _Events.cs
- UIPropertyMetadata.cs
- SeverityFilter.cs
- _DynamicWinsockMethods.cs
- figurelengthconverter.cs
- TypeSystemHelpers.cs
- ControlBuilder.cs
- IpcChannel.cs
- XmlDataContract.cs
- WhitespaceRuleLookup.cs
- UserNameSecurityTokenAuthenticator.cs
- EntityDataSourceColumn.cs
- UpdateCompiler.cs
- AuthenticationServiceManager.cs
- NetNamedPipeBinding.cs
- MarginsConverter.cs
- UnsafeNativeMethodsTablet.cs
- CheckableControlBaseAdapter.cs
- ComAwareEventInfo.cs
- COSERVERINFO.cs
- InfoCardArgumentException.cs
- QilUnary.cs