Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / 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
//
///
/// [To be supplied.]
///
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MethodBuilder.cs
- LineInfo.cs
- AddInBase.cs
- TimeSpanFormat.cs
- RemotingException.cs
- UnsafeNativeMethods.cs
- SharedStatics.cs
- TimeoutValidationAttribute.cs
- AutoCompleteStringCollection.cs
- SafeEventLogWriteHandle.cs
- SystemResourceKey.cs
- FrameworkRichTextComposition.cs
- ModuleBuilder.cs
- SqlCommandBuilder.cs
- prompt.cs
- DockingAttribute.cs
- PathTooLongException.cs
- JsonSerializer.cs
- FormViewRow.cs
- GuidelineCollection.cs
- QfeChecker.cs
- DocumentXPathNavigator.cs
- FigureParaClient.cs
- HandleCollector.cs
- XmlCharCheckingReader.cs
- XmlParserContext.cs
- WindowsGrip.cs
- ChangeNode.cs
- DataSetUtil.cs
- CultureMapper.cs
- FSWPathEditor.cs
- SharedPersonalizationStateInfo.cs
- DispatchWrapper.cs
- Axis.cs
- DropSourceBehavior.cs
- EntityCommandDefinition.cs
- CommonDialog.cs
- ContextMarshalException.cs
- DocumentPageView.cs
- MissingManifestResourceException.cs
- MetabaseServerConfig.cs
- NativeMethodsCLR.cs
- HostTimeoutsElement.cs
- TypedRowGenerator.cs
- AmbientProperties.cs
- MessageQueueCriteria.cs
- ProvidersHelper.cs
- SoapCodeExporter.cs
- DataGridViewRowStateChangedEventArgs.cs
- DefaultMemberAttribute.cs
- Misc.cs
- SiteMapSection.cs
- SmtpAuthenticationManager.cs
- WindowsListViewGroupHelper.cs
- TextBoxLine.cs
- PathSegmentCollection.cs
- XmlSerializationWriter.cs
- Certificate.cs
- ErrorProvider.cs
- ImageButton.cs
- SqlConnectionStringBuilder.cs
- XmlWriterTraceListener.cs
- WebHttpBindingElement.cs
- ColumnBinding.cs
- XmlSchemaSimpleTypeUnion.cs
- TreeChangeInfo.cs
- FixedTextView.cs
- LiteralDesigner.cs
- StreamAsIStream.cs
- Simplifier.cs
- AspNetSynchronizationContext.cs
- TextBlock.cs
- QuotaExceededException.cs
- TdsParser.cs
- ServiceDefaults.cs
- SctClaimSerializer.cs
- DataListItemEventArgs.cs
- DefaultSection.cs
- AmbientValueAttribute.cs
- AbstractDataSvcMapFileLoader.cs
- MessageQueueInstaller.cs
- DataGridHelper.cs
- TemplatedMailWebEventProvider.cs
- TableHeaderCell.cs
- CompilerErrorCollection.cs
- AccessText.cs
- TreeIterator.cs
- SerializerWriterEventHandlers.cs
- String.cs
- ObjectStateManagerMetadata.cs
- ToolStripPanelCell.cs
- OdbcErrorCollection.cs
- WindowsGraphics.cs
- GuidTagList.cs
- TimelineClockCollection.cs
- WebControl.cs
- ValidationSummary.cs
- SerTrace.cs
- StringSource.cs
- MatchingStyle.cs