Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / xsp / System / Web / Util / WorkItem.cs / 1 / WorkItem.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System.Runtime.InteropServices; using System.Security.Permissions; using System.Threading; // // Support for positing of work items to a different thread // ////// public delegate void WorkItemCallback(); ///[To be supplied.] ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class WorkItem { private static bool _useQueueUserWorkItem = true; private static WaitCallback _onQueueUserWorkItemCompletion = new WaitCallback(OnQueueUserWorkItemCompletion); ///[To be supplied.] ////// [SecurityPermission(SecurityAction.Demand, Unrestricted=true)] public static void Post(WorkItemCallback callback) { #if !FEATURE_PAL // ROTORTODO if (Environment.OSVersion.Platform != PlatformID.Win32NT) throw new PlatformNotSupportedException(SR.GetString(SR.RequiresNT)); #else // !FEATURE_PAL throw new NotImplementedException("ROTORTODO"); #endif // !FEATURE_PAL PostInternal(callback); } // assert to disregard the user code up the compressed stack [PermissionSet(SecurityAction.Assert, Unrestricted=true)] private static void CallCallbackWithAssert(WorkItemCallback callback) { callback(); } private static void OnQueueUserWorkItemCompletion(Object state) { WorkItemCallback callback = state as WorkItemCallback; if (callback != null) { CallCallbackWithAssert(callback); } } internal static void PostInternal(WorkItemCallback callback) { if (_useQueueUserWorkItem) { ThreadPool.QueueUserWorkItem(_onQueueUserWorkItemCompletion, callback); } else { WrappedWorkItemCallback w = new WrappedWorkItemCallback(callback); w.Post(); } } } internal class WrappedWorkItemCallback { private GCHandle _rootedThis; private WorkItemCallback _originalCallback; private WorkItemCallback _wrapperCallback; internal WrappedWorkItemCallback(WorkItemCallback callback) { _originalCallback = callback; _wrapperCallback = new WorkItemCallback(this.OnCallback); } internal void Post() { _rootedThis = GCHandle.Alloc(this); if (UnsafeNativeMethods.PostThreadPoolWorkItem(_wrapperCallback) != 1) { _rootedThis.Free(); throw new HttpException(SR.GetString(SR.Cannot_post_workitem)); } } private void OnCallback() { _rootedThis.Free(); _originalCallback(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Util { using System.Runtime.InteropServices; using System.Security.Permissions; using System.Threading; // // Support for positing of work items to a different thread // ////// public delegate void WorkItemCallback(); ///[To be supplied.] ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public class WorkItem { private static bool _useQueueUserWorkItem = true; private static WaitCallback _onQueueUserWorkItemCompletion = new WaitCallback(OnQueueUserWorkItemCompletion); ///[To be supplied.] ////// [SecurityPermission(SecurityAction.Demand, Unrestricted=true)] public static void Post(WorkItemCallback callback) { #if !FEATURE_PAL // ROTORTODO if (Environment.OSVersion.Platform != PlatformID.Win32NT) throw new PlatformNotSupportedException(SR.GetString(SR.RequiresNT)); #else // !FEATURE_PAL throw new NotImplementedException("ROTORTODO"); #endif // !FEATURE_PAL PostInternal(callback); } // assert to disregard the user code up the compressed stack [PermissionSet(SecurityAction.Assert, Unrestricted=true)] private static void CallCallbackWithAssert(WorkItemCallback callback) { callback(); } private static void OnQueueUserWorkItemCompletion(Object state) { WorkItemCallback callback = state as WorkItemCallback; if (callback != null) { CallCallbackWithAssert(callback); } } internal static void PostInternal(WorkItemCallback callback) { if (_useQueueUserWorkItem) { ThreadPool.QueueUserWorkItem(_onQueueUserWorkItemCompletion, callback); } else { WrappedWorkItemCallback w = new WrappedWorkItemCallback(callback); w.Post(); } } } internal class WrappedWorkItemCallback { private GCHandle _rootedThis; private WorkItemCallback _originalCallback; private WorkItemCallback _wrapperCallback; internal WrappedWorkItemCallback(WorkItemCallback callback) { _originalCallback = callback; _wrapperCallback = new WorkItemCallback(this.OnCallback); } internal void Post() { _rootedThis = GCHandle.Alloc(this); if (UnsafeNativeMethods.PostThreadPoolWorkItem(_wrapperCallback) != 1) { _rootedThis.Free(); throw new HttpException(SR.GetString(SR.Cannot_post_workitem)); } } private void OnCallback() { _rootedThis.Free(); _originalCallback(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TimelineGroup.cs
- DirectionalLight.cs
- COM2ColorConverter.cs
- IOException.cs
- StylusOverProperty.cs
- TypeKeyValue.cs
- PolicyValidationException.cs
- RegexParser.cs
- _DigestClient.cs
- QilLiteral.cs
- NullableDecimalMinMaxAggregationOperator.cs
- ScalarType.cs
- DefaultMemberAttribute.cs
- ProcessingInstructionAction.cs
- FeatureSupport.cs
- TableLayoutPanelCodeDomSerializer.cs
- SystemColors.cs
- SQLByteStorage.cs
- _HelperAsyncResults.cs
- TextEditorCopyPaste.cs
- DoWhile.cs
- ResumeStoryboard.cs
- ParameterElement.cs
- OutputCacheSettings.cs
- ConnectorSelectionGlyph.cs
- ProcessHostConfigUtils.cs
- ValueTable.cs
- SpeechSeg.cs
- StringAnimationBase.cs
- FuncCompletionCallbackWrapper.cs
- JsonXmlDataContract.cs
- ActiveXSerializer.cs
- AnimationTimeline.cs
- Size.cs
- FileCodeGroup.cs
- SqlGenericUtil.cs
- UIInitializationException.cs
- CollectionBuilder.cs
- TextEditorCharacters.cs
- DocumentEventArgs.cs
- _UriSyntax.cs
- ToolStripPanelCell.cs
- MemberDescriptor.cs
- HandlerFactoryWrapper.cs
- ImageBrush.cs
- PlacementWorkspace.cs
- AnnotationResource.cs
- URLIdentityPermission.cs
- RightsManagementEncryptedStream.cs
- HeaderedItemsControl.cs
- TreeNodeBindingDepthConverter.cs
- SplitterEvent.cs
- StorageEntitySetMapping.cs
- WebSysDescriptionAttribute.cs
- DockPanel.cs
- EdmType.cs
- TypeValidationEventArgs.cs
- ControlPaint.cs
- RenamedEventArgs.cs
- PickBranchDesigner.xaml.cs
- SessionEndingCancelEventArgs.cs
- ViewLoader.cs
- DesignerContextDescriptor.cs
- TypeSemantics.cs
- OptimizerPatterns.cs
- TaiwanLunisolarCalendar.cs
- ToolStripLocationCancelEventArgs.cs
- DefaultAsyncDataDispatcher.cs
- DurationConverter.cs
- StrokeNodeOperations2.cs
- TreeChangeInfo.cs
- Guid.cs
- PixelShader.cs
- DeploymentSectionCache.cs
- ButtonChrome.cs
- SwitchElementsCollection.cs
- ConfigXmlElement.cs
- Int32CAMarshaler.cs
- AttachmentService.cs
- ColorBlend.cs
- ComponentCache.cs
- HttpCookiesSection.cs
- SamlDelegatingWriter.cs
- GrammarBuilderRuleRef.cs
- WebProxyScriptElement.cs
- CodeDirectionExpression.cs
- ConnectionInterfaceCollection.cs
- BooleanAnimationUsingKeyFrames.cs
- PropertyPushdownHelper.cs
- BitmapEffectrendercontext.cs
- FastPropertyAccessor.cs
- ResXBuildProvider.cs
- NamespaceTable.cs
- CustomValidator.cs
- TypeListConverter.cs
- ClientUtils.cs
- WsrmFault.cs
- Function.cs
- DbgUtil.cs
- LongPath.cs