我有一个带有进度条的 Winform,它正在从CopyFileEx
通话中更新。
我的回调函数(我认为这是问题)是
CopyFileCallbackAction myCallback(FileInfo source, FileInfo destination, object state, long totalFileSize, long totalBytesTransferred)
{
double dProgress = ((double)totalBytesTransferred / byteCount) * 100.0;
backupWorker.ReportProgress((int)dProgress);
return CopyFileCallbackAction.Continue;
}
我调用使用的功能CopyFileEx
是(我认为CopyFileEx
包装器与问题无关,所以我没有发布它)
FileRoutines.CopyFile(new FileInfo(source), new FileInfo(dest), CopyFileOptions.All, myCallback);
byteCount
是long
要复制的所有文件的总大小。
如果我只复制一个文件,它可以完美运行,但是当我开始复制多个文件时问题就开始了。
每当复制一个文件时,进度条的值都会重置回 0,因此当所有内容都复制完毕时,显示的唯一进度是最后一个文件的百分比,所以如果文件的总和为 10MB,并且有 5 个 2MB文件,进度条只上升了五分之一。
我想我可以通过添加另一个静态变量来解决这个问题totalBytesTransferred
,就像这样
public static long bytesCopied = 0;
CopyFileCallbackAction myCallback(FileInfo source, FileInfo destination, object state, long totalFileSize, long totalBytesTransferred)
{
bytesCopied += totalBytesTransferred;
double dProgress = ((double)bytesCopied / byteCount) * 100.0;
backupWorker.ReportProgress((int)dProgress);
return CopyFileCallbackAction.Continue;
}
但我也得到了意想不到的结果。似乎正在传输的字节数远远超过总字节数。
我只能假设它与myCallback
为每个文件使用新文件有关,但现在我真的被卡住了。
任何帮助将非常感激。