我有一个windows c#应用程序,我希望在添加到我的表单的acrobat com对象中显示位于Web服务器上的pdf文件。
pdf.loadfile(@"http://somewhere.com/nowwhere.pdf")
由于我的pdf很大,应用程序似乎一直挂起,直到加载整个文件。
我想读取大文件,而用户不会认为应用程序已挂起。
答案 0 :(得分:3)
我会做以下事情:
答案 1 :(得分:1)
抱歉,没有任何代码,但有关异步文件I / O的这篇文章可能对您有所帮助:
http://www.devsource.com/c/a/Using-VS/Making-Asynchronous-File-IO-Work-in-NET-A-Survival-Guide/
答案 2 :(得分:1)
三个建议。
第一个是打破它并像一些在线书籍那样加载页面。这有点烦人,但可以节省你的加载时间。我认为ItextSharp有一些功能可以做到这一点。
第二次尝试压缩。再次,itextsharp具有允许此
的工具我的第三个建议是查看This thread。选择一些书呆子加载短语并使用动画gif分散您的客户从长时间加载的注意力。显然这是最后的手段,但可能有用。
答案 3 :(得分:1)
使用工作线程。 (例如BackgroundWorker)
MSDN Link to BackgroundWorker
答案 4 :(得分:1)
如果必须从UI线程运行PDF.LoadFile,您可以使用HttpWebRequest在BackgroundWorker中下载该文件,将其保存在本地,然后在Invoke'd(UI线程)函数中调用pdf.loadfile()。
答案 5 :(得分: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线程上。在这种情况下,你最终会遇到问题。