0

Windowsのc#アプリケーションがあり、フォームに追加されたacrobatcomオブジェクトにWebサーバー上にあるpdfファイルを表示したいと思います。

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

私のPDFは大きいので、ファイル全体がロードされるまでアプリケーションがハングしているようです。

アプリケーションがハングしているとユーザーに認識されることなく、大きなファイルを読みたい。

4

5 に答える 5

3

私は次のことをします:

  1. PDFをインポートする別のスレッドを作成します。
  2. ある種の進行状況バーをユーザーに表示します。おそらくキャンセルボタンで。
于 2008-10-08T20:30:32.460 に答える
1

3つの提案。

1 つ目は、一部のオンライン ブックのように、分割して一度に 1 ページずつロードすることです。これは少し面倒ですが、ロード時間を節約できます。ItextSharp にはこれを行うための機能があると思います。

2 回目の圧縮を試みます。繰り返しますが、itextsharpにはこれを可能にするツールがあります

私の 3 番目の提案は、このスレッドをチェックすることです。オタクっぽいローディング フレーズをいくつか選択し、アニメーション GIF を使用して、長いローディング時間からクライアントの注意をそらします。明らかにこれは最後の手段ですが、役に立つ可能性があります。

于 2008-10-08T20:29:02.150 に答える
1

ワーカー スレッドを使用します。(たとえば、BackgroundWorker) BackgroundWorker への
MSDN リンク

于 2008-10-08T20:29:26.317 に答える
1

PDF.LoadFile を UI スレッドから実行する必要がある場合は、HttpWebRequest を使用して BackgroundWorker でファイルをダウンロードし、ローカルに保存してから、呼び出した (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 に答える