我有一个 windows c# 应用程序,我想在添加到我的表单的 acrobat com 对象中显示一个位于网络服务器上的 pdf 文件。
pdf.loadfile(@"http://somewhere.com/nowwhere.pdf")
由于我的 pdf 很大,应用程序似乎一直挂起,直到整个文件加载完毕。
我想读取大文件,而用户不会感觉到应用程序已挂起。
我会做以下事情:
三个建议。
第一个是打破它并像一些在线书籍一样一次加载一个页面。这有点烦人,但可以节省加载时间。我认为 ItextSharp 有一些功能可以做到这一点。
第二次尝试压缩。再次,itextsharp 有允许这样做的工具
我的第三个建议是查看This thread。选择一些书呆子加载短语并使用动画 gif 来分散您的客户对长时间加载的注意力。显然这是最后的手段,但可能有用。
使用工作线程。(以BackgroundWorker 为例)
MSDN Link to BackgroundWorker
如果 PDF.LoadFile 必须从 UI 线程运行,您可以使用 HttpWebRequest 在 BackgroundWorker 中下载文件,将其保存在本地,然后在 Invoke'd(UI 线程)函数中调用 pdf.loadfile()。
显然,如果您可以使用后台线程来进行加载 - 您将一切就绪:
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 线程上。在这种情况下,您最终会遇到问题。