6

プログレスバーを使用して、の進行状況を表示できますか

File.WriteAllBytes(file, array)

C#で?

4

2 に答える 2

10

いいえ。

ループを使用してバイトをチャンクに書き込む必要があります。次のようなものがあなたを始めるはずです。これはバックグラウンドスレッドで実行する必要があることに注意してください。WinFormsを使用している場合は、を使用できますBackgroundWorker

using(var stream = new FileStream(...))
using(var writer = new BinaryWriter(stream)) {
    var bytesLeft = array.Length; // assuming array is an array of bytes
    var bytesWritten = 0;
    while(bytesLeft > 0) {
        var chunkSize = Math.Min(64, bytesLeft);
        writer.WriteBytes(array, bytesWritten, chunkSize);
        bytesWritten += chunkSize;
        bytesLeft -= chunkSize;
        // notify progressbar (assuming you're using a background worker)
        backgroundWorker.ReportProgress(bytesWritten * 100 / array.Length);
    }
}

編集:パタシュが以下で指摘したように、あなたはあなたが仕事をして待つこともできます。私の方法はかなり単純で、追加のスレッドを必要としないと思います(操作を実行するために必要な1つのバックグラウンドスレッドを除く)。これは従来の方法であり、十分に機能します。

于 2013-03-17T22:49:47.347 に答える
5

は同期方式であるためWriteAllBytes、操作が終了するまで何もできず、操作についても何も知りません。

あなたがする必要があるのは、WriteAllBytesのようなメソッドを持っていることですが、http://msdn.microsoft.com/en-AU/library/jj155757.aspxのように非同期で書かれています。非同期メソッドは個別に実行されるため、頻繁に停止してその進行状況をGUIに報告することができます。

于 2013-03-17T22:47:05.607 に答える