Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / 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); } // assertt 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. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ //[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); } // assertt 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. // Copyright (c) Microsoft Corporation. All rights reserved.[To be supplied.] ///
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlSchemaCompilationSettings.cs
- BaseParser.cs
- AssociationTypeEmitter.cs
- Size.cs
- WebContext.cs
- LabelDesigner.cs
- AssociationSet.cs
- ProcessModelSection.cs
- PriorityChain.cs
- RecordManager.cs
- DisplayMemberTemplateSelector.cs
- LogicalCallContext.cs
- DataBoundControlParameterTarget.cs
- WebPartCatalogCloseVerb.cs
- TreeBuilderBamlTranslator.cs
- DotAtomReader.cs
- DifferencingCollection.cs
- HtmlInputRadioButton.cs
- SettingsPropertyValueCollection.cs
- ListViewGroupItemCollection.cs
- LocatorPartList.cs
- Brushes.cs
- ComplexLine.cs
- DebugViewWriter.cs
- SafeNativeMethodsCLR.cs
- BitmapEffectGroup.cs
- CultureSpecificCharacterBufferRange.cs
- ModuleConfigurationInfo.cs
- CharacterString.cs
- DataBindingCollection.cs
- EditorAttribute.cs
- NativeCompoundFileAPIs.cs
- PerformanceCounterManager.cs
- ErrorRuntimeConfig.cs
- SspiSafeHandles.cs
- CombinedHttpChannel.cs
- ECDiffieHellmanCng.cs
- DisplayInformation.cs
- CodeComment.cs
- Nodes.cs
- unitconverter.cs
- MailAddressParser.cs
- ArgumentElement.cs
- OdbcCommandBuilder.cs
- CfgSemanticTag.cs
- DataObjectMethodAttribute.cs
- MetadataCache.cs
- AutoCompleteStringCollection.cs
- WmfPlaceableFileHeader.cs
- DataTablePropertyDescriptor.cs
- TextRunCache.cs
- AppendHelper.cs
- WindowsFormsLinkLabel.cs
- TextBoxRenderer.cs
- ObjectStateEntryDbDataRecord.cs
- XMLSchema.cs
- ScopelessEnumAttribute.cs
- XmlAtomicValue.cs
- CmsInterop.cs
- PngBitmapEncoder.cs
- BinaryConverter.cs
- DropDownButton.cs
- Empty.cs
- MachineKeySection.cs
- GridViewCellAutomationPeer.cs
- ClientFormsIdentity.cs
- LinkArea.cs
- CodeConstructor.cs
- PenThreadWorker.cs
- PropertyTab.cs
- SEHException.cs
- ProgressBarBrushConverter.cs
- MemberBinding.cs
- BypassElement.cs
- HtmlControlAdapter.cs
- WebPartHelpVerb.cs
- AlignmentXValidation.cs
- FocusManager.cs
- TypeConverterAttribute.cs
- DataBoundControl.cs
- XPathAncestorQuery.cs
- coordinatorfactory.cs
- ItemCheckEvent.cs
- CardSpaceException.cs
- WizardDesigner.cs
- LineInfo.cs
- SqlTransaction.cs
- SortFieldComparer.cs
- SqlLiftWhereClauses.cs
- XmlSchemaGroup.cs
- CodeDefaultValueExpression.cs
- WebPartTransformerCollection.cs
- OdbcFactory.cs
- Visual3DCollection.cs
- SqlBuffer.cs
- FilterableData.cs
- SoapEnumAttribute.cs
- ToolboxComponentsCreatedEventArgs.cs
- NameObjectCollectionBase.cs
- AffineTransform3D.cs