Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- StatusStrip.cs
- ControllableStoryboardAction.cs
- SiteMapDataSourceView.cs
- WindowsScrollBar.cs
- SamlConditions.cs
- Calendar.cs
- Label.cs
- FormsAuthenticationConfiguration.cs
- ReadOnlyDataSourceView.cs
- HandlerWithFactory.cs
- ValueTypeFixupInfo.cs
- ConfigUtil.cs
- ClientEndpointLoader.cs
- RepeaterItemCollection.cs
- ProtocolElement.cs
- HttpConfigurationSystem.cs
- UshortList2.cs
- ToolstripProfessionalRenderer.cs
- _ContextAwareResult.cs
- HotCommands.cs
- DataGridState.cs
- LogRestartAreaEnumerator.cs
- TdsEnums.cs
- WindowsGraphics2.cs
- TextSpanModifier.cs
- Parser.cs
- AdapterDictionary.cs
- XmlSchemaSimpleContentExtension.cs
- ConnectionManagementElement.cs
- TailCallAnalyzer.cs
- EasingKeyFrames.cs
- SemanticAnalyzer.cs
- CompiledRegexRunnerFactory.cs
- StoreContentChangedEventArgs.cs
- ClientTarget.cs
- WSHttpBindingElement.cs
- Shape.cs
- CacheAxisQuery.cs
- TemplatedMailWebEventProvider.cs
- LayoutInformation.cs
- EdmScalarPropertyAttribute.cs
- MultiDataTrigger.cs
- DesignRelation.cs
- ReadContentAsBinaryHelper.cs
- BindValidator.cs
- GenericUI.cs
- XmlAtomicValue.cs
- HtmlTable.cs
- TracePayload.cs
- Switch.cs
- Script.cs
- VideoDrawing.cs
- SelectionEditingBehavior.cs
- TraversalRequest.cs
- TextSelectionHighlightLayer.cs
- ExpressionLink.cs
- RoutingExtension.cs
- IHttpResponseInternal.cs
- NativeMethodsCLR.cs
- GridViewHeaderRowPresenter.cs
- MediaTimeline.cs
- XPathNavigator.cs
- Pair.cs
- CreatingCookieEventArgs.cs
- loginstatus.cs
- EventMappingSettingsCollection.cs
- MethodExpression.cs
- UIElementParagraph.cs
- RelatedImageListAttribute.cs
- Funcletizer.cs
- CellParaClient.cs
- Attributes.cs
- ErrorTableItemStyle.cs
- TextEditorDragDrop.cs
- DataGridViewImageCell.cs
- FileLogRecordStream.cs
- XslTransform.cs
- DashStyle.cs
- FileSystemEnumerable.cs
- MatrixValueSerializer.cs
- DiffuseMaterial.cs
- ComponentGuaranteesAttribute.cs
- CryptoKeySecurity.cs
- configsystem.cs
- EntityDataSourceColumn.cs
- ObjectDataSourceDisposingEventArgs.cs
- ServicePointManagerElement.cs
- NotifyParentPropertyAttribute.cs
- ManipulationDevice.cs
- ConcurrentDictionary.cs
- XmlValidatingReaderImpl.cs
- Point4D.cs
- SqlWorkflowPersistenceService.cs
- SecurityContext.cs
- ProcessHostMapPath.cs
- FontFamilyIdentifier.cs
- figurelengthconverter.cs
- ResourcesGenerator.cs
- LocalizationParserHooks.cs
- Triangle.cs