我可以使用进度条来显示进度
File.WriteAllBytes(file, array)
Run Code Online (Sandbox Code Playgroud)
在C#?
没有.
您需要使用循环以块的形式写入字节.像下面这样的东西应该让你开始.请注意,这需要在后台线程中运行.我使用的是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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如Patashu在下面指出的那样,你也可以完成任务并等待.我认为我的方法相当简单,不需要任何额外的线程(除了你需要进行操作的一个后台线程).这是传统方式,运作良好.
由于WriteAllBytes是同步方法,因此在完成操作之前,您无需执行任何操作,也无法了解操作.
你需要做的是有一个像WriteAllBytes这样的方法,但写成异步,如http://msdn.microsoft.com/en-AU/library/jj155757.aspx.您可以每隔一段时间停止异步方法并将其进度报告给GUI,因为它单独运行.
| 归档时间: |
|
| 查看次数: |
2441 次 |
| 最近记录: |