私はいくつかのファイルを暗号化しようとしていますが、うまくいきますが、100mb-1gbファイルのように大きなファイルがどのくらい離れているかを示すプログレスバーを表示しようとすると、非常に遅いです。 ReportProgressがすぐに呼び出されていると仮定しているので、2秒ごとに更新するようにストップウォッチを追加しましたが、これは非常に高速に動作しました(まだreportProgressを呼び出すことなく速く動作しませんでした)まったく。CryptoStream ReportProgress ProgressBar C#
using (FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create))
{
using (CryptoStream cs = new CryptoStream(fsCrypt, AES.CreateEncryptor(), CryptoStreamMode.Write))
{
using (FileStream fsIn = new FileStream(inputFile, FileMode.Open))
{
int data;
int test = 0;
Stopwatch stopw = new Stopwatch();
stopw.Start();
while ((data = fsIn.ReadByte()) != -1)
{
cs.WriteByte((byte) data);
test++;
if (stopw.Elapsed.Seconds > 2)
{
stopw.Reset();
backgroundWorker1.ReportProgress((int) fsIn.Length);
}
}
stopw.Stop();
}
}
}
例はbackgroundWorker1.ReportProgress((int) fsIn.Length);
行でファイルが5秒を取ることができます削除されますが、それはで追加して、それが20秒を取って終わるということです。
これを改善してより速くするにはどうすればよいですか?
これはうまくいくはずですが、プログレスバーがまったく変化していないと思われます。0% – jLynx
oops、test is int ....レポートの進捗パラメータを '(int)(test * 100 /合計) ' – bpursley
それは約1/4の方法でそれに失敗します' '-34'の値は '値'のために有効ではありません。 「値」は「最小値」と「最大値」の間である必要があります。 – jLynx