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
- ZoneIdentityPermission.cs
- OutputScope.cs
- GlobalId.cs
- DataGridViewElement.cs
- EntityDataSourceQueryBuilder.cs
- EditorBrowsableAttribute.cs
- SafeArrayRankMismatchException.cs
- DescendantOverDescendantQuery.cs
- ColorConvertedBitmap.cs
- PropertyValueUIItem.cs
- SafeEventHandle.cs
- ClientConfigurationSystem.cs
- SchemaTypeEmitter.cs
- EntityClientCacheKey.cs
- SpeechRecognizer.cs
- EntityProxyTypeInfo.cs
- oledbconnectionstring.cs
- MaxMessageSizeStream.cs
- HttpClientCertificate.cs
- LoginName.cs
- OpCodes.cs
- WhitespaceRuleReader.cs
- CodeGotoStatement.cs
- SafeSecurityHandles.cs
- TreeNode.cs
- DataGridViewControlCollection.cs
- ItemsPresenter.cs
- KeyGestureConverter.cs
- Viewport3DAutomationPeer.cs
- SqlNotificationRequest.cs
- ChannelCacheSettings.cs
- Membership.cs
- XmlEncodedRawTextWriter.cs
- safex509handles.cs
- SocketCache.cs
- TraceShell.cs
- MetadataWorkspace.cs
- SoapSchemaMember.cs
- KnownBoxes.cs
- ReferenceEqualityComparer.cs
- BuildManager.cs
- SqlReferenceCollection.cs
- HwndProxyElementProvider.cs
- ColorMap.cs
- ZipIORawDataFileBlock.cs
- RelatedView.cs
- RuntimeComponentFilter.cs
- ComAdminInterfaces.cs
- CrossAppDomainChannel.cs
- MenuItem.cs
- Parser.cs
- DataBoundControlHelper.cs
- XmlSchemaValidator.cs
- RelatedPropertyManager.cs
- SmiEventSink.cs
- PropertyCondition.cs
- XmlCustomFormatter.cs
- ObjRef.cs
- ProgressBarHighlightConverter.cs
- PeerApplicationLaunchInfo.cs
- LineServicesCallbacks.cs
- ResourceKey.cs
- MutexSecurity.cs
- SingleConverter.cs
- SafeNativeMethodsCLR.cs
- MimeMapping.cs
- SoapObjectWriter.cs
- SubMenuStyleCollection.cs
- AssemblyHash.cs
- CaseInsensitiveComparer.cs
- InternalSafeNativeMethods.cs
- ToolStripLabel.cs
- TextSelection.cs
- TextParagraph.cs
- WorkflowIdleBehavior.cs
- precedingsibling.cs
- StyleBamlRecordReader.cs
- StaticResourceExtension.cs
- DiscoveryDocumentSearchPattern.cs
- MeshGeometry3D.cs
- XMLSchema.cs
- SqlNodeAnnotations.cs
- SqlProcedureAttribute.cs
- MenuItemBinding.cs
- IgnoreDeviceFilterElement.cs
- UnmanagedMemoryAccessor.cs
- QueryOperationResponseOfT.cs
- LineBreakRecord.cs
- LabelDesigner.cs
- Pointer.cs
- StructuralObject.cs
- Formatter.cs
- BitmapEffect.cs
- ToolboxItemCollection.cs
- ReferentialConstraint.cs
- ActivityMarkupSerializer.cs
- _CommandStream.cs
- ObjectNavigationPropertyMapping.cs
- ScriptMethodAttribute.cs