我是wpf newb,因此此問題可能很小。 我想從一個文件夾複製文件到另一個文件夾。我想在複製過程中顯示一個進度條。WPF在異步文件複製期間顯示進度欄
我的代碼是這樣的:
if (!System.IO.File.Exists(basemapDest))
{
await Copier.CopyFiles(new Dictionary<string, string>
{
{basemapSrc, basemapDest},
}, prog => prgBaseMap.Value = prog);
}
public static class Copier
{
public static async Task CopyFiles(Dictionary<string, string> files, Action<int> progressCallback)
{
for (var x = 0; x < files.Count; x++)
{
var item = files.ElementAt(x);
var from = item.Key;
var to = item.Value;
using (var outStream = new FileStream(to, FileMode.Create, FileAccess.Write, FileShare.Read))
{
using (var inStream = new FileStream(from, FileMode.Open, FileAccess.Read, FileShare.Read))
{
long fileLength = from.Length;
await inStream.CopyToAsync(outStream);
}
}
progressCallback((int)((x + 1)/files.Count) * 100);
}
}
}
我的XAML代碼:
<StackPanel>
<ProgressBar x:Name="prgBaseMap" Height="10" Visibility="Collapsed"/>
</StackPanel>
儘管這適用於報告被複制它不顯示進度,而我做了副本的文件。我究竟做錯了什麼 ?
***編輯,這不是stream.copyto with progress bar reporting
引用的問題是使用這些天被很多人視爲過時,一個BackgroundWorker的副本。這個問題是關於使用.NET的新異步模型。我希望提供的解決方案對其他人也有用。
什麼是'prgBaseMap'?你錯過了那個類的'INotifyPropertyChanged'實現嗎? – torvin
你想要顯示什麼樣的進展?您發佈的代碼將在每個文件被複制後更新進度。您只複製一個文件,所以我不希望在屏幕上看到任何有用的進度顯示。如果您希望在文件複製過程中更新進度,則必須使用更明確的方法進行復制,並在文件的較小塊被讀取並寫入新文件時更新進度。 –
不幸的是,你提出的問題並不十分清楚。請提供可靠地重現問題的[良好,_minimal_,_complete_代碼示例](http://stackoverflow.com/help/mcve),以及該代碼的具體說明以及與您想要的不同之處去做。 –