0

我有一个 windows c# 应用程序,我想在添加到我的表单的 acrobat com 对象中显示一个位于网络服务器上的 pdf 文件。

pdf.loadfile(@"http://somewhere.com/nowwhere.pdf")

由于我的 pdf 很大,应用程序似乎一直挂起,直到整个文件加载完毕。

我想读取大文件,而用户不会感觉到应用程序已挂起。

4

5 回答 5

3

我会做以下事情:

  1. 创建另一个线程以导入 pdf。
  2. 向用户显示某种进度条。也许有一个取消按钮。
于 2008-10-08T20:30:32.460 回答
1

三个建议。

第一个是打破它并像一些在线书籍一样一次加载一个页面。这有点烦人,但可以节省加载时间。我认为 ItextSharp 有一些功能可以做到这一点。

第二次尝试压缩。再次,itextsharp 有允许这样做的工具

我的第三个建议是查看This thread。选择一些书呆子加载短语并使用动画 gif 来分散您的客户对长时间加载的注意力。显然这是最后的手段,但可能有用。

于 2008-10-08T20:29:02.150 回答
1

使用工作线程。(以BackgroundWorker 为例)
MSDN Link to BackgroundWorker

于 2008-10-08T20:29:26.317 回答
1

如果 PDF.LoadFile 必须从 UI 线程运行,您可以使用 HttpWebRequest 在 BackgroundWorker 中下载文件,将其保存在本地,然后在 Invoke'd(UI 线程)函数中调用 pdf.loadfile()。

于 2008-10-08T21:05:24.370 回答
0

显然,如果您可以使用后台线程来进行加载 - 您将一切就绪:

Pdf pdf;

void ShowPdf() {
   if (this.InvokeRequired) {
     this.Invoke(() => this.ShowPdf());
   }
   // give pdf a window...
}

void LoadPdf() {
   System.Threading.ThreadPool.QueueUserWorkItem(() => {
      pdf.LoadFile("http://example.com/somelarge.pdf");
      this.ShowPdf();
   });
}

那里可能出现的问题(我从未使用过 Acrobat 的 COM PDF 查看器)是 PDF 对象需要在 UI 线程上。在这种情况下,您最终会遇到问题。

于 2008-10-08T20:46:15.143 回答