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
- Pkcs7Recipient.cs
- MsmqChannelFactoryBase.cs
- SpotLight.cs
- FixUpCollection.cs
- TraceUtility.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- CheckBox.cs
- FileSystemWatcher.cs
- SortFieldComparer.cs
- ServicePointManager.cs
- HttpRequestWrapper.cs
- AttributeAction.cs
- UserControlParser.cs
- LicenseManager.cs
- AccessKeyManager.cs
- DocumentStatusResources.cs
- ProfileSection.cs
- VirtualPathProvider.cs
- ThaiBuddhistCalendar.cs
- EdmItemCollection.cs
- SamlDoNotCacheCondition.cs
- DesignerTransactionCloseEvent.cs
- LassoSelectionBehavior.cs
- VariableQuery.cs
- TreeNodeEventArgs.cs
- DataTablePropertyDescriptor.cs
- FormViewUpdatedEventArgs.cs
- IdentityValidationException.cs
- RegisteredArrayDeclaration.cs
- ScrollChangedEventArgs.cs
- RemotingServices.cs
- WebPartsSection.cs
- DataGridViewCellPaintingEventArgs.cs
- XmlWrappingWriter.cs
- XamlGridLengthSerializer.cs
- AuditLevel.cs
- Directory.cs
- CapabilitiesPattern.cs
- XmlSequenceWriter.cs
- GetResponse.cs
- querybuilder.cs
- X509ChainPolicy.cs
- HttpServerUtilityWrapper.cs
- DependencyObject.cs
- AdditionalEntityFunctions.cs
- XhtmlConformanceSection.cs
- Geometry3D.cs
- XamlPoint3DCollectionSerializer.cs
- DataBindingCollectionConverter.cs
- ProcessModule.cs
- WorkflowApplicationCompletedEventArgs.cs
- ToolboxBitmapAttribute.cs
- ImplicitInputBrush.cs
- KnownColorTable.cs
- ProfileSection.cs
- SoapTransportImporter.cs
- UrlAuthFailedErrorFormatter.cs
- XmlNodeList.cs
- sqlnorm.cs
- XPathException.cs
- PlatformCulture.cs
- NegotiateStream.cs
- EditCommandColumn.cs
- RegexMatchCollection.cs
- EndpointAddressAugust2004.cs
- AutoResetEvent.cs
- FrameworkElementAutomationPeer.cs
- ECDsa.cs
- SerializationHelper.cs
- TableRowCollection.cs
- TagPrefixAttribute.cs
- BaseConfigurationRecord.cs
- ImportStoreException.cs
- BindingWorker.cs
- ServicePerformanceCounters.cs
- ParallelForEach.cs
- XmlTextReaderImpl.cs
- ImageDesigner.cs
- HMAC.cs
- FileDialogCustomPlace.cs
- Label.cs
- EventWaitHandle.cs
- ExpandoClass.cs
- SmtpSection.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- StringPropertyBuilder.cs
- serverconfig.cs
- DockAndAnchorLayout.cs
- AdRotator.cs
- XmlCountingReader.cs
- ApplicationProxyInternal.cs
- SourceSwitch.cs
- VirtualDirectoryMapping.cs
- DropDownButton.cs
- OnOperation.cs
- AutoGeneratedField.cs
- EntityDataSourceMemberPath.cs
- ChannelServices.cs
- PagerSettings.cs
- PreviewPageInfo.cs