Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Util / WorkItem.cs / 1305376 / 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.] ////// 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.] ////// 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
- sapiproxy.cs
- CharAnimationUsingKeyFrames.cs
- RawTextInputReport.cs
- GACIdentityPermission.cs
- FreezableCollection.cs
- SkipQueryOptionExpression.cs
- SuspendDesigner.cs
- HttpCachePolicyElement.cs
- WizardStepBase.cs
- RuntimeCompatibilityAttribute.cs
- ZoneIdentityPermission.cs
- SqlConnection.cs
- UTF7Encoding.cs
- CorrelationQuery.cs
- StructuralCache.cs
- ConfigurationLockCollection.cs
- Listbox.cs
- Console.cs
- UmAlQuraCalendar.cs
- NameObjectCollectionBase.cs
- InputDevice.cs
- DetailsViewRowCollection.cs
- DesignerGeometryHelper.cs
- Helpers.cs
- OpacityConverter.cs
- ListenerElementsCollection.cs
- EndpointBehaviorElement.cs
- AccessDataSourceView.cs
- FaultDesigner.cs
- SizeValueSerializer.cs
- WebHttpSecurityModeHelper.cs
- Int16Converter.cs
- DiscoveryReferences.cs
- CredentialCache.cs
- CallbackValidator.cs
- PrinterResolution.cs
- FixedDocumentSequencePaginator.cs
- Baml2006KnownTypes.cs
- sqlpipe.cs
- SingleConverter.cs
- FormClosedEvent.cs
- ArrayExtension.cs
- ObjectSecurity.cs
- StatusBarItem.cs
- DataKeyArray.cs
- WindowsBrush.cs
- CheckBox.cs
- XPathSelfQuery.cs
- UrlPath.cs
- InputGestureCollection.cs
- PageRanges.cs
- Util.cs
- JsonSerializer.cs
- Psha1DerivedKeyGeneratorHelper.cs
- ToolStripGripRenderEventArgs.cs
- InfoCardSchemas.cs
- ForeignKeyConstraint.cs
- ReadOnlyCollectionBuilder.cs
- StorageEntitySetMapping.cs
- DataObjectFieldAttribute.cs
- HashLookup.cs
- webproxy.cs
- Variant.cs
- SessionIDManager.cs
- NotImplementedException.cs
- FormViewInsertedEventArgs.cs
- UriSection.cs
- ModulesEntry.cs
- UInt64Storage.cs
- ReferencedType.cs
- CodeIterationStatement.cs
- RegexWorker.cs
- PrivilegedConfigurationManager.cs
- WinEventWrap.cs
- ApplicationInfo.cs
- ControlAdapter.cs
- Attribute.cs
- _KerberosClient.cs
- EventDescriptorCollection.cs
- MetadataImporter.cs
- SQLInt16Storage.cs
- ScalarOps.cs
- RenameRuleObjectDialog.cs
- Span.cs
- HtmlInputControl.cs
- SettingsPropertyCollection.cs
- ToolStripTemplateNode.cs
- Visitor.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- Graphics.cs
- PageThemeBuildProvider.cs
- IProvider.cs
- DataBinder.cs
- SignatureGenerator.cs
- ExpressionPrefixAttribute.cs
- DBAsyncResult.cs
- EventTrigger.cs
- ProxyWebPart.cs
- WeakReferenceList.cs
- IfElseDesigner.xaml.cs