2013-03-17 95 views
4

我可以用一個進度條來顯示如何學習WriteAllBytes進步

File.WriteAllBytes(file, array) 

在C#中的進展如何?

+0

不,您需要使用['FileStream.Write'](例如http://msdn.microsoft.com/en-us/library/system.io.filestream.write.aspx)製作自己的函數。 – Blorgbeard 2013-03-17 22:46:44

回答

5

由於WriteAllBytes是一種同步方法,因此您無法對操作進行任何操作,直到它完成。

你需要做的是有一個像WriteAllBytes這樣的方法,但是寫成異步的,比如http://msdn.microsoft.com/en-AU/library/jj155757.aspx。您可以每隔一段時間讓異步方法停止並將其進度報告給GUI,因爲它分開運行。

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); 
    } 
} 

編輯:正如Patashi在下面指出的,你也可以在你的任務中等待。我認爲我的方法非常簡單,並且不需要任何額外的線程資源(除了需要執行操作的一個後臺線程外)。這是傳統方式,運作良好。