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
- TextRangeBase.cs
- AQNBuilder.cs
- HttpWebRequestElement.cs
- PlaceHolder.cs
- FormsAuthenticationModule.cs
- DoubleKeyFrameCollection.cs
- ManagementDateTime.cs
- SafeBitVector32.cs
- SelfIssuedAuthRSAPKCS1SignatureDeformatter.cs
- BindingListCollectionView.cs
- PingReply.cs
- OperationContractAttribute.cs
- JumpList.cs
- XmlProcessingInstruction.cs
- SafeViewOfFileHandle.cs
- TouchPoint.cs
- LicenseProviderAttribute.cs
- XmlSchema.cs
- DecoderReplacementFallback.cs
- SqlFlattener.cs
- CodeMemberMethod.cs
- HwndMouseInputProvider.cs
- WinEventWrap.cs
- SoapFormatter.cs
- SqlConnectionString.cs
- HttpModulesSection.cs
- X509IssuerSerialKeyIdentifierClause.cs
- CommonObjectSecurity.cs
- ConstantProjectedSlot.cs
- PropertyTabAttribute.cs
- DataServiceConfiguration.cs
- UniqueConstraint.cs
- ResourceContainer.cs
- HtmlWindowCollection.cs
- DataPagerFieldCollection.cs
- ContainerControl.cs
- VirtualPathUtility.cs
- ExecutionEngineException.cs
- ClaimSet.cs
- WebRequestModulesSection.cs
- CheckBoxStandardAdapter.cs
- ButtonChrome.cs
- SelectionEditor.cs
- AsyncPostBackErrorEventArgs.cs
- DataBindingCollectionEditor.cs
- __ConsoleStream.cs
- IDataContractSurrogate.cs
- HtmlSelect.cs
- UpdatePanel.cs
- RelationshipEntry.cs
- RegexGroup.cs
- CompilerError.cs
- UriSectionReader.cs
- EndPoint.cs
- HttpRuntime.cs
- ImageAttributes.cs
- PriorityQueue.cs
- ReaderWriterLockSlim.cs
- ExtensionSurface.cs
- AsyncResult.cs
- XmlEncodedRawTextWriter.cs
- OrderByQueryOptionExpression.cs
- ComponentEditorForm.cs
- SignatureHelper.cs
- DecimalConstantAttribute.cs
- ReplacementText.cs
- PhysicalAddress.cs
- ProcessInputEventArgs.cs
- Attributes.cs
- AttributeQuery.cs
- ProfileSettingsCollection.cs
- Win32SafeHandles.cs
- Method.cs
- XmlILAnnotation.cs
- ErrorEventArgs.cs
- HorizontalAlignConverter.cs
- GiveFeedbackEventArgs.cs
- DockProviderWrapper.cs
- EditingCoordinator.cs
- MarkupCompiler.cs
- ListBase.cs
- UnsafeNativeMethods.cs
- StrokeNodeData.cs
- PasswordRecovery.cs
- PanningMessageFilter.cs
- PersistenceProviderDirectory.cs
- HandleCollector.cs
- HttpCachePolicyWrapper.cs
- XmlQueryCardinality.cs
- ElementAction.cs
- SerializationInfo.cs
- CreateInstanceBinder.cs
- FontDriver.cs
- DesignerForm.cs
- IdleTimeoutMonitor.cs
- SchemaObjectWriter.cs
- VersionPair.cs
- ListControlConvertEventArgs.cs
- Padding.cs
- EnumerableRowCollection.cs