【问题标题】:How to learn WriteAllBytes progress如何学习 WriteAllBytes 进度
【发布时间】:2013-03-06 05:13:16
【问题描述】:

我可以用进度条来显示进度吗

File.WriteAllBytes(file, array)

在 C# 中?

【问题讨论】:

标签: c# progress


【解决方案1】:

没有。

您需要使用循环将字节写入块中。类似以下内容应该可以帮助您入门。请注意,这需要在后台线程中运行。我你使用的是 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 在下面指出的那样,您也可以执行任务并等待。我认为我的方法相当简单,不需要任何额外的线程内容(除了您需要执行操作的一个后台线程)。这是传统的方式,效果很好。

【讨论】:

    【解决方案2】:

    由于WriteAllBytes 是一种同步方法,因此在操作完成之前,您什么都不做,也不知道操作。

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

    【讨论】:

      猜你喜欢
      • 2017-05-20
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2018-10-25
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多