Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- RotateTransform.cs
- Camera.cs
- TypeUnloadedException.cs
- SqlServer2KCompatibilityAnnotation.cs
- PointUtil.cs
- HelpOperationInvoker.cs
- xdrvalidator.cs
- UserUseLicenseDictionaryLoader.cs
- SystemMulticastIPAddressInformation.cs
- PenThread.cs
- TimelineCollection.cs
- InvalidCommandTreeException.cs
- OpacityConverter.cs
- InArgument.cs
- DataGridViewColumnCollectionEditor.cs
- MethodToken.cs
- UnionCqlBlock.cs
- EqualityComparer.cs
- TrackBar.cs
- RegexWriter.cs
- ToolStripItemTextRenderEventArgs.cs
- FlowchartDesignerCommands.cs
- MinimizableAttributeTypeConverter.cs
- BitmapFrameEncode.cs
- SystemInfo.cs
- AnonymousIdentificationModule.cs
- WmlValidatorAdapter.cs
- LinearGradientBrush.cs
- XmlSerializableReader.cs
- SqlUserDefinedAggregateAttribute.cs
- Int32Converter.cs
- SchemaElement.cs
- ViewEventArgs.cs
- FixedHighlight.cs
- IIS7UserPrincipal.cs
- JavascriptCallbackMessageInspector.cs
- SkinBuilder.cs
- TypeInitializationException.cs
- RuleSettings.cs
- CacheSection.cs
- SqlDataSourceWizardForm.cs
- XmlAttributes.cs
- DataGridViewColumnEventArgs.cs
- DependencyPropertyConverter.cs
- RevocationPoint.cs
- HtmlButton.cs
- TraceAsyncResult.cs
- TextFormatterImp.cs
- BufferModesCollection.cs
- EventLogTraceListener.cs
- OpCodes.cs
- RoutedCommand.cs
- StreamInfo.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- HijriCalendar.cs
- ApplicationSecurityInfo.cs
- DefaultMemberAttribute.cs
- AnimationClockResource.cs
- CanonicalXml.cs
- XmlNotation.cs
- BindingContext.cs
- DecimalStorage.cs
- _ShellExpression.cs
- CqlErrorHelper.cs
- ConfigurationPropertyCollection.cs
- ViewManager.cs
- SafeRightsManagementHandle.cs
- CodeTypeDeclarationCollection.cs
- ComEventsInfo.cs
- PropertyContainer.cs
- CipherData.cs
- BinaryFormatterWriter.cs
- DispatchWrapper.cs
- CodeTryCatchFinallyStatement.cs
- IgnoreDataMemberAttribute.cs
- PeerNameRecord.cs
- StringFreezingAttribute.cs
- SafeIUnknown.cs
- DesignerAttribute.cs
- ItemCheckedEvent.cs
- ConfigurationSettings.cs
- OutOfMemoryException.cs
- AsyncStreamReader.cs
- ItemPager.cs
- InProcStateClientManager.cs
- XomlCompilerHelpers.cs
- streamingZipPartStream.cs
- RelationalExpressions.cs
- DependencyObjectProvider.cs
- RadioButton.cs
- HttpCapabilitiesEvaluator.cs
- TraceLevelStore.cs
- BindingManagerDataErrorEventArgs.cs
- AudioFormatConverter.cs
- CompositeActivityValidator.cs
- VisualStateManager.cs
- TransactedBatchingElement.cs
- ArglessEventHandlerProxy.cs
- ClaimSet.cs
- X509ChainElement.cs