WPF DocumentViewer падает при прокрутке вниз для предварительного просмотра второй страницы документа XPS - PullRequest
0 голосов
/ 19 января 2019

Я использую WPF DocumentViewer для предварительного просмотра документа XPS в моем приложении.Код фактически конвертирует из PDF в XPF.Когда я прокручиваю вниз во время предварительного просмотра, он ведет себя как ожидалось.Однако в тот момент, когда я достигаю точки, где должна появиться вторая страница, я получаю сообщение об ошибке:

(Dispatcher): [System.NotImplementedException: этот метод не реализован этим классом.в System.Net.WebRequest.BeginGetResponse (обратный вызов AsyncCallback, состояние объекта) в System.IO.Packaging.PackWebRequest.GetResponse () в MS.Internal.WpfWebRequestHelper.GetResponse (запрос WebRequestReponestHerf, ContentType & contentType) в System.Windows.Documents.PageContent._LoadPageImpl (Uri baseUri, Uri uriToLoad, FixedPage & fixedPage, Stream & pageStream) в System.Windows.Documents.PageContentAsyncResult.Dispatch (объектная точка Windows.InternalRealCall (обратный вызов делегата, объектные аргументы, Int32 numArgs) в System.Windows.Threading.ExceptionWrapper.TryCatchWhen (исходный объект, обратный вызов делегата, объектные аргументы, Int32 numArgs, делегат catchHandler)].

Донне понимаю WebRequest, потому что я работаю в закрытой сети, где нет доступа в Интернет.Мне не нужно это для предварительного просмотра.

Мой код ниже.Некоторый код был написан из информации, поступающей из этого поста .Первоначально я получал описанную в этом посте ошибку, которая, кажется, исправлена, но теперь я получаю вышеуказанную ошибку и не могу понять, почему.Ошибка говорит о том, что «метод не реализован», но не знает, о каком методе идет речь.Похоже, что он делает асинхронный вызов, когда я прокручиваю.Может кто-нибудь объяснить, что он делает и как действовать?

    public void PreviewDocument()
    {
        m_documentService = GcsIocContainer.Instance.Container.Resolve<IDocumentService>();
        var xpsDocument = m_documentService.ConvertPdfToXps(Convert.FromBase64String(PdfBase64String));

        FixedDocumentSequence fixedDocumentSequence = GetFixedDocumentSequence(xpsDocument);
        m_nativeDocumentViewer.Document = fixedDocumentSequence;
    }

    public class MemoryStreamUri : IWebRequestCreate
    {

        public WebRequest Create(Uri uri)
        {
            return new MemoryStreamRequest(uri);
        }
    }

    public class MemoryStreamRequest : WebRequest
    {
        private Uri _uri;

        public MemoryStreamRequest(Uri uri)
        {
            _uri = uri;
        }

        public override Uri RequestUri
        {
            get { return _uri; }
        }

        public override int Timeout
        {
            get { return System.Threading.Timeout.Infinite; }

        }
    }

    private FixedDocumentSequence GetFixedDocumentSequence(byte[] xpsBytes)
    {
        Uri packageUri;
        XpsDocument xpsDocument = null;

        var memURi = new MemoryStreamUri();
        WebRequest.RegisterPrefix("memorystream", memURi);

        using (MemoryStream xpsStream = new MemoryStream(xpsBytes))
        {
            using (Package package = Package.Open(xpsStream))
            {
                packageUri = new Uri(@"memorystream://" + Path.GetFileName(Guid.NewGuid().ToString()) + ".xps");

                try
                {
                    PackageStore.AddPackage(packageUri, package);
                    xpsDocument = new XpsDocument(package, CompressionOption.Maximum, packageUri.AbsoluteUri);

                    return xpsDocument.GetFixedDocumentSequence();
                }
                catch (Exception ex)
                {
                    var msg = ex.Message;
                    return null;
                }
                finally
                {
                    if (xpsDocument != null)
                    {
                        xpsDocument.Close();
                    }
                    PackageStore.RemovePackage(packageUri);
                }
            }
        }
    }
...