2012-01-06 6 views
1

私はindy 10を使用していますが、私はどのようにファイルを転送するためのプログレスバーを実装できますかと思いました。私はonWorkイベントを試しましたが、トリガーされません。私が気に入っているもう一つのことは、ストリームがダウンロードされるまでアプリケーションがフリーズすることです。TIdTCPClientでプログレスバーを実装する方法は?

私は間違っていますか?

+0

進捗状況のフィードバックを使用して子孫ストリームクラスをインスツルメント化できます。 – OnTheFly

+1

[DelphiとIndyを使用してProgressイベントでプログラムからインターネットからファイルをダウンロードする]の可能な複製(http://stackoverflow.com/questions/2184473/download-a-file-from-internet-programatically-with-an-progress) -event-using-delph) –

答えて

2

フォームにIdAntiFreezeコンポーネントを追加し、そのプロパティとイベントを使用してネットワーク操作の進行状況を通知します。

+0

AntiFreezeは大変感謝しています。 – opc0de

+4

いつもTIdAntiFreezeを使用する必要があります。通常は、まずは正しいデザインを使用していません。この場合、転送中にメインスレッドがブロックされないように、 'TIdTCPClient'を別のワーカースレッドに移動するほうが良いかもしれません。これがオプションでない場合は、 'OnWork ...'イベントの中の 'TForm'または' TProgressBar'の 'Update()'メソッドを少なくとも呼び出して、進行状況UIが視覚的に更新されるようにすることができます'TIdAntiFreeze'を全く使わずに。 –

0

TThreadを使用してダウンロードコードを別のスレッドに入れて、ダウンロード中にアプリがフリーズしないようにすることができます。TThread.Synchronizeに送信してプログレスバーを更新する手順があります。また、OnWorkを呼び出すには、OnWorkBeginを最初に呼び出す必要があります。http://www.borlandtalk.com/image-vp569607.html

関連する問題