Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Documents / PageContentAsyncResult.cs / 1 / PageContentAsyncResult.cs
//---------------------------------------------------------------------------- //// Copyright (C) 2004 by Microsoft Corporation. All rights reserved. // // // Description: // Implements the PageContentAsyncResult // // History: // 02/25/2004 - Zhenbin Xu (ZhenbinX) - Created. // // //--------------------------------------------------------------------------- namespace System.Windows.Documents { using System; using System.Diagnostics; using System.IO; using System.Windows.Threading; using System.Threading; using MS.Internal; using MS.Internal.AppModel; using MS.Internal.Utility; using MS.Internal.Navigation; using MS.Utility; using System.Reflection; using System.Windows.Controls; using System.Windows.Markup; using System.Net; using System.IO.Packaging; ////// IAsyncResult for GetPageAsync. This item is passed around and queued up during various /// phase of async call. /// internal sealed class PageContentAsyncResult : IAsyncResult { //------------------------------------------------------------------- // // Internal enum // //--------------------------------------------------------------------- internal enum GetPageStatus { Loading, Cancelled, Finished } //-------------------------------------------------------------------- // // Ctor // //--------------------------------------------------------------------- #region Ctor internal PageContentAsyncResult(AsyncCallback callback, object state, Dispatcher dispatcher, Uri baseUri, Uri source, FixedPage child) { this._dispatcher = dispatcher; this._isCompleted = false; this._completedSynchronously = false; this._callback = callback; this._asyncState = state; this._getpageStatus = GetPageStatus.Loading; this._child = child; this._baseUri = baseUri; Debug.Assert(source == null || source.IsAbsoluteUri); this._source = source; } #endregion Ctor //-------------------------------------------------------------------- // // Public Methods // //---------------------------------------------------------------------- //------------------------------------------------------------------- // // Public Properties // //---------------------------------------------------------------------- #region IAsyncResult //--------------------------------------------------------------------- ////// Gets a user-defined object that contains information about /// this GetPageAsync call /// public object AsyncState { get { return _asyncState; } } //--------------------------------------------------------------------- ////// Gets a WaitHandle that is used to wait for the asynchrounus /// GetPageAsync to complete. We are not providing WaitHandle /// since this can be called on the main UIThread. /// public WaitHandle AsyncWaitHandle { get { Debug.Assert(false); return null; } } //--------------------------------------------------------------------- ////// Gets an indication of whether the asynchronous GetPage /// completed synchronously. /// public bool CompletedSynchronously { get { return _completedSynchronously; } } //---------------------------------------------------------------------- ////// Gets an indication whether the asynchronous GetPage has finished /// public bool IsCompleted { get { return _isCompleted; } } #endregion IAsyncResult //------------------------------------------------------------------- // // Internal Methods // //---------------------------------------------------------------------- #region DispatcherOperationCallback //---------------------------------------------------------------------- internal object Dispatch(object arg) { if (this._exception != null) { // force finish if there was any exception this._getpageStatus = GetPageStatus.Finished; } switch (this._getpageStatus) { case GetPageStatus.Loading: try { if (this._child != null) { this._completedSynchronously = true; this._result = this._child; _getpageStatus = GetPageStatus.Finished; goto case GetPageStatus.Finished; } // // Note if _source == null, exception will // be thrown. // Stream responseStream = null; object o = null; WebResponse response = WpfWebRequestHelper.CreateRequestAndGetResponse(this._source); responseStream = response.GetResponseStream(); ParserContext pc = new ParserContext(); pc.BaseUri = this._source; XpsValidatingLoader loader = new XpsValidatingLoader(); o = loader.Load(responseStream, _baseUri, pc, new ContentType(response.ContentType)); if (o == null) { throw new ApplicationException(SR.Get(SRID.PageContentUnsupportedMimeType)); } _result = o as FixedPage; if (_result == null) { throw new ApplicationException(SR.Get(SRID.PageContentUnsupportedPageType, o.GetType())); } if (_result.IsInitialized) { responseStream.Close(); } else { _pendingStream = responseStream; _result.Initialized += new EventHandler(_OnPaserFinished); } _getpageStatus = GetPageStatus.Finished; } catch (ApplicationException e) { this._exception = e; } goto case GetPageStatus.Finished; case GetPageStatus.Cancelled: // do nothing goto case GetPageStatus.Finished; case GetPageStatus.Finished: _isCompleted = true; if (_callback != null) { _callback(this); } break; } return null; } #endregion DispatcherOperationCallback //----------------------------------------------------------------- internal void Cancel() { _getpageStatus = GetPageStatus.Cancelled; // } internal void Wait() { _dispatcherOperation.Wait(); } //-------------------------------------------------------------------- // // Internal Properties // //--------------------------------------------------------------------- #region Internal Properties //--------------------------------------------------------------------- internal Exception Exception { get { return _exception; } } //----------------------------------------------------------------- internal bool IsCancelled { get { return _getpageStatus == GetPageStatus.Cancelled; } } internal DispatcherOperation DispatcherOperation { set { _dispatcherOperation = value; } } //------------------------------------------------------------------ internal FixedPage Result { get { return _result; } } #endregion Internal Properties //------------------------------------------------------------------- // // Private Methods // //---------------------------------------------------------------------- #region Private Methods private void _OnPaserFinished(object sender, EventArgs args) { if (_pendingStream != null) { _pendingStream.Close(); _pendingStream = null; } } #endregion Private Methods //-------------------------------------------------------------------- // // Private Fields // //--------------------------------------------------------------------- #region Private private object _asyncState; private bool _isCompleted; private bool _completedSynchronously; private AsyncCallback _callback; private Exception _exception; private GetPageStatus _getpageStatus; private Uri _baseUri; private Uri _source; private FixedPage _child; private Dispatcher _dispatcher; private FixedPage _result; private Stream _pendingStream; private DispatcherOperation _dispatcherOperation; #endregion Private } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- //// Copyright (C) 2004 by Microsoft Corporation. All rights reserved. // // // Description: // Implements the PageContentAsyncResult // // History: // 02/25/2004 - Zhenbin Xu (ZhenbinX) - Created. // // //--------------------------------------------------------------------------- namespace System.Windows.Documents { using System; using System.Diagnostics; using System.IO; using System.Windows.Threading; using System.Threading; using MS.Internal; using MS.Internal.AppModel; using MS.Internal.Utility; using MS.Internal.Navigation; using MS.Utility; using System.Reflection; using System.Windows.Controls; using System.Windows.Markup; using System.Net; using System.IO.Packaging; ////// IAsyncResult for GetPageAsync. This item is passed around and queued up during various /// phase of async call. /// internal sealed class PageContentAsyncResult : IAsyncResult { //------------------------------------------------------------------- // // Internal enum // //--------------------------------------------------------------------- internal enum GetPageStatus { Loading, Cancelled, Finished } //-------------------------------------------------------------------- // // Ctor // //--------------------------------------------------------------------- #region Ctor internal PageContentAsyncResult(AsyncCallback callback, object state, Dispatcher dispatcher, Uri baseUri, Uri source, FixedPage child) { this._dispatcher = dispatcher; this._isCompleted = false; this._completedSynchronously = false; this._callback = callback; this._asyncState = state; this._getpageStatus = GetPageStatus.Loading; this._child = child; this._baseUri = baseUri; Debug.Assert(source == null || source.IsAbsoluteUri); this._source = source; } #endregion Ctor //-------------------------------------------------------------------- // // Public Methods // //---------------------------------------------------------------------- //------------------------------------------------------------------- // // Public Properties // //---------------------------------------------------------------------- #region IAsyncResult //--------------------------------------------------------------------- ////// Gets a user-defined object that contains information about /// this GetPageAsync call /// public object AsyncState { get { return _asyncState; } } //--------------------------------------------------------------------- ////// Gets a WaitHandle that is used to wait for the asynchrounus /// GetPageAsync to complete. We are not providing WaitHandle /// since this can be called on the main UIThread. /// public WaitHandle AsyncWaitHandle { get { Debug.Assert(false); return null; } } //--------------------------------------------------------------------- ////// Gets an indication of whether the asynchronous GetPage /// completed synchronously. /// public bool CompletedSynchronously { get { return _completedSynchronously; } } //---------------------------------------------------------------------- ////// Gets an indication whether the asynchronous GetPage has finished /// public bool IsCompleted { get { return _isCompleted; } } #endregion IAsyncResult //------------------------------------------------------------------- // // Internal Methods // //---------------------------------------------------------------------- #region DispatcherOperationCallback //---------------------------------------------------------------------- internal object Dispatch(object arg) { if (this._exception != null) { // force finish if there was any exception this._getpageStatus = GetPageStatus.Finished; } switch (this._getpageStatus) { case GetPageStatus.Loading: try { if (this._child != null) { this._completedSynchronously = true; this._result = this._child; _getpageStatus = GetPageStatus.Finished; goto case GetPageStatus.Finished; } // // Note if _source == null, exception will // be thrown. // Stream responseStream = null; object o = null; WebResponse response = WpfWebRequestHelper.CreateRequestAndGetResponse(this._source); responseStream = response.GetResponseStream(); ParserContext pc = new ParserContext(); pc.BaseUri = this._source; XpsValidatingLoader loader = new XpsValidatingLoader(); o = loader.Load(responseStream, _baseUri, pc, new ContentType(response.ContentType)); if (o == null) { throw new ApplicationException(SR.Get(SRID.PageContentUnsupportedMimeType)); } _result = o as FixedPage; if (_result == null) { throw new ApplicationException(SR.Get(SRID.PageContentUnsupportedPageType, o.GetType())); } if (_result.IsInitialized) { responseStream.Close(); } else { _pendingStream = responseStream; _result.Initialized += new EventHandler(_OnPaserFinished); } _getpageStatus = GetPageStatus.Finished; } catch (ApplicationException e) { this._exception = e; } goto case GetPageStatus.Finished; case GetPageStatus.Cancelled: // do nothing goto case GetPageStatus.Finished; case GetPageStatus.Finished: _isCompleted = true; if (_callback != null) { _callback(this); } break; } return null; } #endregion DispatcherOperationCallback //----------------------------------------------------------------- internal void Cancel() { _getpageStatus = GetPageStatus.Cancelled; // } internal void Wait() { _dispatcherOperation.Wait(); } //-------------------------------------------------------------------- // // Internal Properties // //--------------------------------------------------------------------- #region Internal Properties //--------------------------------------------------------------------- internal Exception Exception { get { return _exception; } } //----------------------------------------------------------------- internal bool IsCancelled { get { return _getpageStatus == GetPageStatus.Cancelled; } } internal DispatcherOperation DispatcherOperation { set { _dispatcherOperation = value; } } //------------------------------------------------------------------ internal FixedPage Result { get { return _result; } } #endregion Internal Properties //------------------------------------------------------------------- // // Private Methods // //---------------------------------------------------------------------- #region Private Methods private void _OnPaserFinished(object sender, EventArgs args) { if (_pendingStream != null) { _pendingStream.Close(); _pendingStream = null; } } #endregion Private Methods //-------------------------------------------------------------------- // // Private Fields // //--------------------------------------------------------------------- #region Private private object _asyncState; private bool _isCompleted; private bool _completedSynchronously; private AsyncCallback _callback; private Exception _exception; private GetPageStatus _getpageStatus; private Uri _baseUri; private Uri _source; private FixedPage _child; private Dispatcher _dispatcher; private FixedPage _result; private Stream _pendingStream; private DispatcherOperation _dispatcherOperation; #endregion Private } } // 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
- EdmSchemaError.cs
- DoubleLink.cs
- ToolStripButton.cs
- DependencyObject.cs
- CellTreeSimplifier.cs
- safex509handles.cs
- InputDevice.cs
- ValidationEventArgs.cs
- EventManager.cs
- QueryableFilterUserControl.cs
- BaseParaClient.cs
- CommandManager.cs
- File.cs
- EventSinkHelperWriter.cs
- BufferAllocator.cs
- ViewStateException.cs
- LinqExpressionNormalizer.cs
- BypassElement.cs
- MenuItemStyle.cs
- HMACMD5.cs
- EdmFunction.cs
- COM2ComponentEditor.cs
- SystemFonts.cs
- ListChangedEventArgs.cs
- ValidatorCollection.cs
- TreeNodeCollection.cs
- ReachIDocumentPaginatorSerializerAsync.cs
- CompositeFontFamily.cs
- ByteKeyFrameCollection.cs
- UnhandledExceptionEventArgs.cs
- SemanticAnalyzer.cs
- ProfileEventArgs.cs
- BrowserCapabilitiesCompiler.cs
- FtpRequestCacheValidator.cs
- TemplateLookupAction.cs
- CommandConverter.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- EndpointAddressProcessor.cs
- DiscreteKeyFrames.cs
- TypeToken.cs
- _UncName.cs
- ContainerParagraph.cs
- WebPartDisplayModeEventArgs.cs
- SoapServerProtocol.cs
- DrawingContextDrawingContextWalker.cs
- fixedPageContentExtractor.cs
- XmlSchemaProviderAttribute.cs
- ExclusiveCanonicalizationTransform.cs
- DataTableCollection.cs
- Trace.cs
- IPPacketInformation.cs
- BlockUIContainer.cs
- WindowsToolbarItemAsMenuItem.cs
- ListSourceHelper.cs
- DefaultCommandExtensionCallback.cs
- DataGridViewComboBoxColumnDesigner.cs
- EqualityComparer.cs
- SkewTransform.cs
- ObjectQueryExecutionPlan.cs
- Run.cs
- XamlDesignerSerializationManager.cs
- DefaultAuthorizationContext.cs
- SemaphoreFullException.cs
- PingReply.cs
- ObjectHandle.cs
- HighlightVisual.cs
- complextypematerializer.cs
- EdmSchemaError.cs
- ViewPort3D.cs
- PrintingPermission.cs
- AttachedProperty.cs
- Condition.cs
- VariantWrapper.cs
- TextPattern.cs
- ColumnWidthChangedEvent.cs
- TextSelectionHighlightLayer.cs
- ObjectFullSpanRewriter.cs
- DefaultTraceListener.cs
- WebRequestModulesSection.cs
- PenThread.cs
- ShaperBuffers.cs
- ObjectItemCachedAssemblyLoader.cs
- CompilerScope.Storage.cs
- ProgressiveCrcCalculatingStream.cs
- ProfessionalColorTable.cs
- DBParameter.cs
- DataGridItemAutomationPeer.cs
- complextypematerializer.cs
- TypeExtensionConverter.cs
- PenThreadPool.cs
- HttpHeaderCollection.cs
- listitem.cs
- FixUp.cs
- Pool.cs
- JsonGlobals.cs
- LinkedResourceCollection.cs
- ComponentConverter.cs
- SessionState.cs
- EventLogTraceListener.cs
- GetPageNumberCompletedEventArgs.cs