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
- ping.cs
- NetCodeGroup.cs
- AssertFilter.cs
- SqlFileStream.cs
- AttachedProperty.cs
- DataObjectSettingDataEventArgs.cs
- Journaling.cs
- _ServiceNameStore.cs
- SerializationException.cs
- XamlClipboardData.cs
- DynamicMethod.cs
- HtmlTitle.cs
- NativeCppClassAttribute.cs
- ButtonDesigner.cs
- TreeViewImageIndexConverter.cs
- ButtonFieldBase.cs
- FixedSOMLineRanges.cs
- WebPartCloseVerb.cs
- sqlcontext.cs
- CatalogZoneAutoFormat.cs
- GridViewColumnCollection.cs
- NumberFunctions.cs
- String.cs
- PixelFormatConverter.cs
- ObjRef.cs
- RefreshEventArgs.cs
- UserControlAutomationPeer.cs
- PageThemeParser.cs
- ComplexPropertyEntry.cs
- GroupBoxRenderer.cs
- BuildManager.cs
- lengthconverter.cs
- ProfileService.cs
- NavigationPropertyEmitter.cs
- CalendarTable.cs
- XmlnsDictionary.cs
- BasicDesignerLoader.cs
- InnerItemCollectionView.cs
- XmlQueryType.cs
- Vars.cs
- DataGridRowHeaderAutomationPeer.cs
- ExceptionCollection.cs
- OdbcCommand.cs
- PhonemeEventArgs.cs
- LogicalChannel.cs
- DesignerSerializationOptionsAttribute.cs
- Schema.cs
- Function.cs
- IPEndPoint.cs
- DbParameterHelper.cs
- PreviewPageInfo.cs
- RangeValuePatternIdentifiers.cs
- Vector3DValueSerializer.cs
- SamlAttributeStatement.cs
- MatrixTransform.cs
- MarshalDirectiveException.cs
- Dictionary.cs
- CompilationSection.cs
- TextServicesManager.cs
- DataSysAttribute.cs
- exports.cs
- BindingGroup.cs
- EntityCollectionChangedParams.cs
- MailDefinition.cs
- WindowsFormsHelpers.cs
- PeerDuplexChannel.cs
- FreezableCollection.cs
- ObjectList.cs
- RegistryPermission.cs
- HtmlElementErrorEventArgs.cs
- InputScopeAttribute.cs
- SequenceNumber.cs
- WebPageTraceListener.cs
- Hyperlink.cs
- RelatedCurrencyManager.cs
- ViewGenResults.cs
- OleDbTransaction.cs
- InputLanguageProfileNotifySink.cs
- ThreadExceptionEvent.cs
- SqlReferenceCollection.cs
- ApplicationFileCodeDomTreeGenerator.cs
- TextServicesCompartmentEventSink.cs
- ScrollPattern.cs
- SmtpNtlmAuthenticationModule.cs
- SqlConnectionStringBuilder.cs
- EntityFunctions.cs
- ResourceReferenceKeyNotFoundException.cs
- tabpagecollectioneditor.cs
- SiteMapNode.cs
- BitmapData.cs
- HitTestDrawingContextWalker.cs
- NameNode.cs
- XamlGridLengthSerializer.cs
- StrokeNodeEnumerator.cs
- SiteMapPathDesigner.cs
- TypedTableBase.cs
- XPathNodeInfoAtom.cs
- ValidationEventArgs.cs
- ThreadAttributes.cs
- TreeViewItem.cs