Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / MS / Internal / Data / DefaultAsyncDataDispatcher.cs / 1 / DefaultAsyncDataDispatcher.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Default async scheduler for data operations. // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Threading; using System.Windows; using System.Windows.Data; using MS.Internal; namespace MS.Internal.Data { internal class DefaultAsyncDataDispatcher : IAsyncDataDispatcher { //----------------------------------------------------- // // Interface: IAsyncDataDispatcher // //----------------------------------------------------- ///Add a request to the dispatcher's queue void IAsyncDataDispatcher.AddRequest(AsyncDataRequest request) { lock (_list.SyncRoot) { _list.Add(request); } ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessRequest), request); } ///Cancel all requests in the dispatcher's queue void IAsyncDataDispatcher.CancelAllRequests() { lock (_list.SyncRoot) { for (int i=0; i<_list.Count; ++i) { AsyncDataRequest request = (AsyncDataRequest)_list[i]; request.Cancel(); } _list.Clear(); } } //------------------------------------------------------ // // Private methods // //----------------------------------------------------- // Run a single request. This method gets scheduled on a worker thread // from the process ThreadPool. void ProcessRequest(object o) { AsyncDataRequest request = (AsyncDataRequest)o; // PreSharp uses message numbers that the C# compiler doesn't know about. // Disable the C# complaints, per the PreSharp documentation. #pragma warning disable 1634, 1691 // PreSharp complains about catching NullReference (and other) exceptions. // In this case, these are precisely the ones we want to catch the most, // so that a failure on a worker thread doesn't affect the main thread. #pragma warning disable 56500 // run the request - this may take a while try { request.Complete(request.DoWork()); } // Catch all exceptions. There is no app code on the stack, // so the exception isn't actionable by the app. // Yet we don't want to crash the app. catch (Exception ex) { if (CriticalExceptions.IsCriticalException(ex)) throw; request.Fail(ex); } catch // non CLS compliant exception { request.Fail(new InvalidOperationException(SR.Get(SRID.NonCLSException, "processing an async data request"))); } #pragma warning restore 56500 #pragma warning restore 1634, 1691 // remove the request from the list lock (_list.SyncRoot) { _list.Remove(request); } } //------------------------------------------------------ // // Private data // //------------------------------------------------------ ArrayList _list = new ArrayList(); } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Default async scheduler for data operations. // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Threading; using System.Windows; using System.Windows.Data; using MS.Internal; namespace MS.Internal.Data { internal class DefaultAsyncDataDispatcher : IAsyncDataDispatcher { //----------------------------------------------------- // // Interface: IAsyncDataDispatcher // //----------------------------------------------------- ///Add a request to the dispatcher's queue void IAsyncDataDispatcher.AddRequest(AsyncDataRequest request) { lock (_list.SyncRoot) { _list.Add(request); } ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessRequest), request); } ///Cancel all requests in the dispatcher's queue void IAsyncDataDispatcher.CancelAllRequests() { lock (_list.SyncRoot) { for (int i=0; i<_list.Count; ++i) { AsyncDataRequest request = (AsyncDataRequest)_list[i]; request.Cancel(); } _list.Clear(); } } //------------------------------------------------------ // // Private methods // //----------------------------------------------------- // Run a single request. This method gets scheduled on a worker thread // from the process ThreadPool. void ProcessRequest(object o) { AsyncDataRequest request = (AsyncDataRequest)o; // PreSharp uses message numbers that the C# compiler doesn't know about. // Disable the C# complaints, per the PreSharp documentation. #pragma warning disable 1634, 1691 // PreSharp complains about catching NullReference (and other) exceptions. // In this case, these are precisely the ones we want to catch the most, // so that a failure on a worker thread doesn't affect the main thread. #pragma warning disable 56500 // run the request - this may take a while try { request.Complete(request.DoWork()); } // Catch all exceptions. There is no app code on the stack, // so the exception isn't actionable by the app. // Yet we don't want to crash the app. catch (Exception ex) { if (CriticalExceptions.IsCriticalException(ex)) throw; request.Fail(ex); } catch // non CLS compliant exception { request.Fail(new InvalidOperationException(SR.Get(SRID.NonCLSException, "processing an async data request"))); } #pragma warning restore 56500 #pragma warning restore 1634, 1691 // remove the request from the list lock (_list.SyncRoot) { _list.Remove(request); } } //------------------------------------------------------ // // Private data // //------------------------------------------------------ ArrayList _list = new ArrayList(); } } // 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
- _emptywebproxy.cs
- Clipboard.cs
- WarningException.cs
- ScriptDescriptor.cs
- WsdlBuildProvider.cs
- QueryPageSettingsEventArgs.cs
- DataGridViewTextBoxEditingControl.cs
- Serializer.cs
- ResourceCategoryAttribute.cs
- GeneralTransform3D.cs
- Propagator.cs
- ExceptionUtil.cs
- BindingContext.cs
- TraceHandlerErrorFormatter.cs
- GridProviderWrapper.cs
- Marshal.cs
- CallTemplateAction.cs
- ColumnWidthChangingEvent.cs
- GlyphsSerializer.cs
- DataColumnSelectionConverter.cs
- AsymmetricCryptoHandle.cs
- XmlSiteMapProvider.cs
- PipeStream.cs
- SelectionWordBreaker.cs
- SafeEventHandle.cs
- SmtpDigestAuthenticationModule.cs
- PersianCalendar.cs
- XNodeValidator.cs
- WindowsRichEditRange.cs
- BitmapEffectGroup.cs
- ModelItemCollectionImpl.cs
- _ProxyChain.cs
- CompiledRegexRunner.cs
- DataColumnPropertyDescriptor.cs
- FixedSOMTableCell.cs
- FlowNode.cs
- MemberAssignment.cs
- HopperCache.cs
- WebPermission.cs
- DateTimeParse.cs
- Scalars.cs
- InnerItemCollectionView.cs
- SecurityUtils.cs
- ContextMenuStrip.cs
- PrintControllerWithStatusDialog.cs
- XhtmlBasicFormAdapter.cs
- XPathDocument.cs
- TemplateBindingExpressionConverter.cs
- OrderablePartitioner.cs
- SID.cs
- IntegrationExceptionEventArgs.cs
- TextFormatterHost.cs
- TextProviderWrapper.cs
- NotConverter.cs
- ProgramPublisher.cs
- _HeaderInfoTable.cs
- HighlightComponent.cs
- ArraySet.cs
- WebServiceBindingAttribute.cs
- DataKey.cs
- DataSourceControl.cs
- TemplatedAdorner.cs
- BamlBinaryWriter.cs
- DiagnosticTraceSource.cs
- AlternateView.cs
- IChannel.cs
- DropSourceBehavior.cs
- ResourceCategoryAttribute.cs
- ViewPort3D.cs
- XmlSchemaComplexContentRestriction.cs
- DataGridViewTextBoxColumn.cs
- IdentityNotMappedException.cs
- XmlNamespaceMappingCollection.cs
- PhysicalAddress.cs
- _UncName.cs
- PropertyGridView.cs
- WorkflowApplicationAbortedException.cs
- WeakReference.cs
- AssemblyBuilder.cs
- smtpconnection.cs
- PageParserFilter.cs
- TileModeValidation.cs
- DefaultValueTypeConverter.cs
- Separator.cs
- TextBoxLine.cs
- SafeIUnknown.cs
- CapiSafeHandles.cs
- BlobPersonalizationState.cs
- TextDecoration.cs
- PathSegmentCollection.cs
- StatusBarPanel.cs
- XmlSchemaElement.cs
- DataServiceClientException.cs
- ElementProxy.cs
- RefreshEventArgs.cs
- HtmlInputControl.cs
- ListDictionaryInternal.cs
- CheckBox.cs
- WebSysDefaultValueAttribute.cs
- SqlDataRecord.cs