如何学习WriteAllBytes进度

时间:2013-03-17 22:41:24

标签: c# progress

我可以使用进度条显示

的进度
File.WriteAllBytes(file, array)
在C#中

2 个答案:

答案 0 :(得分:8)

没有

您需要使用循环以块的形式写入字节。像下面这样的东西应该让你开始。请注意,这需要在后台线程中运行。我使用的是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);
    }
}
编辑:正如Patashu在下面指出的那样,你也可以完成任务并等待。我认为我的方法相当简单,不需要任何额外的线程(除了你需要进行操作的一个后台线程)。这是传统方式并且运作良好。

答案 1 :(得分:5)

由于WriteAllBytes是一种同步方法,因此在完成操​​作之前,您无需执行任何操作。

你需要做的是有一个类似WriteAllBytes的方法,但写成异步的,例如在http://msdn.microsoft.com/en-AU/library/jj155757.aspx中。您可以每隔一段时间停止异步方法并将其进度报告给GUI,因为它单独运行。

相关问题