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
- FrameworkElementFactoryMarkupObject.cs
- OleDbCommand.cs
- IsolatedStorageFile.cs
- WindowsListViewSubItem.cs
- CacheDependency.cs
- RegexMatchCollection.cs
- SubstitutionResponseElement.cs
- FileNotFoundException.cs
- AssociationSetEnd.cs
- SessionIDManager.cs
- DuplicateDetector.cs
- DataControlButton.cs
- ActivityFunc.cs
- WebBrowsableAttribute.cs
- SendKeys.cs
- CodeArgumentReferenceExpression.cs
- SQLDateTimeStorage.cs
- GeometryHitTestResult.cs
- SrgsSemanticInterpretationTag.cs
- EncoderReplacementFallback.cs
- ToolStripDropDownItem.cs
- PointIndependentAnimationStorage.cs
- ImageIndexConverter.cs
- MulticastDelegate.cs
- DataReceivedEventArgs.cs
- LocationFactory.cs
- SecurityPolicySection.cs
- CodeSnippetTypeMember.cs
- NegotiateStream.cs
- CharacterBuffer.cs
- BinaryMessageEncoder.cs
- WebBrowserContainer.cs
- ObjectDataSourceMethodEventArgs.cs
- AssemblyInfo.cs
- EditorPartChrome.cs
- ProvidePropertyAttribute.cs
- GeometryConverter.cs
- LoginCancelEventArgs.cs
- ShapingEngine.cs
- EmptyStringExpandableObjectConverter.cs
- NativeRecognizer.cs
- unsafeIndexingFilterStream.cs
- LinearKeyFrames.cs
- XmlAnyElementAttribute.cs
- StyleHelper.cs
- ToolboxComponentsCreatingEventArgs.cs
- DataGridViewHitTestInfo.cs
- SerializationFieldInfo.cs
- HybridWebProxyFinder.cs
- HotCommands.cs
- ResizeGrip.cs
- SmiEventStream.cs
- CodeSnippetStatement.cs
- CancelEventArgs.cs
- SQLBytesStorage.cs
- MonthChangedEventArgs.cs
- EdmPropertyAttribute.cs
- EnterpriseServicesHelper.cs
- MatrixAnimationUsingPath.cs
- PenThreadPool.cs
- FileDialogCustomPlace.cs
- ComplexPropertyEntry.cs
- SplashScreenNativeMethods.cs
- Base64Encoding.cs
- xsdvalidator.cs
- RenderTargetBitmap.cs
- SelectionItemProviderWrapper.cs
- metadatamappinghashervisitor.cs
- ListSortDescription.cs
- OdbcCommand.cs
- CursorConverter.cs
- DbParameterCollectionHelper.cs
- IntSecurity.cs
- Delegate.cs
- SafeCloseHandleCritical.cs
- CreateUserErrorEventArgs.cs
- storagemappingitemcollection.viewdictionary.cs
- ParsedAttributeCollection.cs
- StrokeIntersection.cs
- NotifyIcon.cs
- dbdatarecord.cs
- StatusBar.cs
- ValidationSummaryDesigner.cs
- BindingCollection.cs
- XmlBaseWriter.cs
- Registry.cs
- returneventsaver.cs
- KeyGesture.cs
- SurrogateSelector.cs
- WebHttpBinding.cs
- TextBoxBase.cs
- BCryptHashAlgorithm.cs
- WebRequest.cs
- DataGridColumnEventArgs.cs
- MenuItemBindingCollection.cs
- HitTestWithPointDrawingContextWalker.cs
- SolidColorBrush.cs
- RadioButtonAutomationPeer.cs
- StorageBasedPackageProperties.cs
- StylusPointCollection.cs