Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / ThreadBehavior.cs / 1 / ThreadBehavior.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Dispatcher { using System; using System.ServiceModel; using System.Threading; using System.ServiceModel.Channels; class ThreadBehavior { SendOrPostCallback threadAffinityCallback; static WaitCallback cleanThreadCallback; readonly SynchronizationContext context; internal ThreadBehavior(DispatchRuntime dispatch) { this.context = dispatch.SynchronizationContext; } SendOrPostCallback ThreadAffinityCallbackDelegate { get { if (this.threadAffinityCallback == null) { this.threadAffinityCallback = new SendOrPostCallback(this.SynchronizationContextCallback); } return this.threadAffinityCallback; } } static WaitCallback CleanThreadCallbackDelegate { get { if (ThreadBehavior.cleanThreadCallback == null) { ThreadBehavior.cleanThreadCallback = new WaitCallback(ThreadBehavior.CleanThreadCallback); } return ThreadBehavior.cleanThreadCallback; } } internal void BindThread(ref MessageRpc rpc) { SynchronizationContext context = rpc.InstanceContext.SynchronizationContext ?? this.context; if (context != null) { IResumeMessageRpc resume = rpc.Pause(); context.Post(this.ThreadAffinityCallbackDelegate, resume); } else if (rpc.SwitchedThreads) { IResumeMessageRpc resume = rpc.Pause(); IOThreadScheduler.ScheduleCallback(ThreadBehavior.CleanThreadCallbackDelegate, resume); } } internal void BindEndThread(ref MessageRpc rpc) { this.BindThread(ref rpc); } void SynchronizationContextCallback(object state) { bool alreadyResumedNoLock; ((IResumeMessageRpc)state).Resume(out alreadyResumedNoLock); if (alreadyResumedNoLock) { string text = SR.GetString(SR.SFxMultipleCallbackFromSynchronizationContext, context.GetType().ToString()); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(text)); } } static void CleanThreadCallback(object state) { bool alreadyResumedNoLock; ((IResumeMessageRpc)state).Resume(out alreadyResumedNoLock); if (alreadyResumedNoLock) { DiagnosticUtility.DebugAssert("IOThreadScheduler called back twice"); } } internal static SynchronizationContext GetCurrentSynchronizationContext() { if (ServiceHostingEnvironment.ApplicationDomainHosted) { return null; } return SynchronizationContext.Current; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- loginstatus.cs
- SetState.cs
- DocumentReferenceCollection.cs
- ConnectionPoolManager.cs
- Exceptions.cs
- GlyphCollection.cs
- Adorner.cs
- isolationinterop.cs
- GridToolTip.cs
- DataTableClearEvent.cs
- MemoryResponseElement.cs
- BaseProcessor.cs
- DataGridViewTopLeftHeaderCell.cs
- MenuItemBindingCollection.cs
- CodeDomDesignerLoader.cs
- HttpCapabilitiesSectionHandler.cs
- StateRuntime.cs
- WebConfigurationHostFileChange.cs
- PrintPreviewGraphics.cs
- ClientConfigPaths.cs
- ColorMap.cs
- EllipticalNodeOperations.cs
- IntegrationExceptionEventArgs.cs
- EventLogger.cs
- AddInAdapter.cs
- DataViewManagerListItemTypeDescriptor.cs
- BitSet.cs
- AttributedMetaModel.cs
- Int64Converter.cs
- EraserBehavior.cs
- StatusBar.cs
- SafeCryptoHandles.cs
- PersonalizationProviderCollection.cs
- ProtocolsConfigurationHandler.cs
- OutputCacheProfile.cs
- MemoryRecordBuffer.cs
- SkinBuilder.cs
- DataGridAddNewRow.cs
- Menu.cs
- GraphicsPath.cs
- Section.cs
- RelOps.cs
- XmlDataLoader.cs
- SecurityResources.cs
- ArgumentOutOfRangeException.cs
- TextServicesCompartmentContext.cs
- ProgramPublisher.cs
- SessionStateSection.cs
- StylusOverProperty.cs
- TriggerBase.cs
- DESCryptoServiceProvider.cs
- WebPartConnectionsCancelVerb.cs
- EncoderNLS.cs
- TreeNodeEventArgs.cs
- TextRenderer.cs
- SQLInt32Storage.cs
- SimpleLine.cs
- SqlCacheDependencyDatabaseCollection.cs
- JsonByteArrayDataContract.cs
- DataBindingCollection.cs
- Lazy.cs
- TextMarkerSource.cs
- EpmSyndicationContentSerializer.cs
- ChangeTracker.cs
- SchemaCollectionCompiler.cs
- UiaCoreProviderApi.cs
- HtmlPageAdapter.cs
- DateTimeConverter.cs
- ExtensibleClassFactory.cs
- configsystem.cs
- WorkflowInspectionServices.cs
- PointValueSerializer.cs
- LingerOption.cs
- TypeExtension.cs
- HTMLTextWriter.cs
- SqlCrossApplyToCrossJoin.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- ImpersonationContext.cs
- AttachedAnnotation.cs
- TdsParser.cs
- FlowLayoutPanel.cs
- ProcessThreadCollection.cs
- Constraint.cs
- EdmMember.cs
- PlatformCulture.cs
- RegexStringValidatorAttribute.cs
- BufferedWebEventProvider.cs
- DataBindingList.cs
- MailAddress.cs
- KeyPullup.cs
- HandleValueEditor.cs
- ClockGroup.cs
- StaticExtensionConverter.cs
- RangeExpression.cs
- TypeSystemProvider.cs
- SynchronizedChannelCollection.cs
- PropertyGrid.cs
- SafeCoTaskMem.cs
- ValueExpressions.cs
- coordinatorfactory.cs