在我的下载管理器应用程序中,我正在使用以下代码来计算当前传输速率:
TimeSpan interval = DateTime.Now - lastUpdateTime;
downloadSpeed = (int)Math.Floor((double)(DownloadedSize + cachedSize - lastUpdateDownloadedSize) / interval.TotalSeconds);
lastUpdateDownloadedSize = DownloadedSize + cachedSize;
lastUpdateTime = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)
这通常可以按我想要的方式工作(我每4秒左右更新一次速度),但是随着下载速度的波动,下载率始终会出现一些疯狂的峰值。我的平均下载速度约为600 kB / s,有时它显示为10.25 MB / s,甚至是负值,如-2093848 B / s。怎么会这样
计算实时下载率的最佳方法是什么?我对平均速率(DownloadedSize / TimeElapsed.TotalSeconds)不感兴趣,因为它无法给出真实的结果。
我需要为我的文件下载器应用程序实现下载速率限制,并且我已经ThrottledStream从CodeProject 查看了该类,但是这在我的情况下不起作用,因为我必须能够在下载期间更改限制,而不仅仅是在开始.这是我在后台线程中使用的下载方法的一部分:
webResponse = (HttpWebResponse)webRequest.GetResponse();
responseStream = webResponse.GetResponseStream();
responseStream.ReadTimeout = 5000;
downloadCache = new MemoryStream(this.MaxCacheSize);
byte[] downloadBuffer = new byte[this.BufferSize];
int bytesSize = 0;
CachedSize = 0;
int receivedBufferCount = 0;
while (true)
{
bytesSize = responseStream.Read(downloadBuffer, 0, downloadBuffer.Length);
if (this.Status != DownloadStatus.Downloading || bytesSize == 0
|| this.MaxCacheSize < CachedSize + bytesSize)
{
WriteCacheToFile(downloadCache, CachedSize);
this.DownloadedSize += CachedSize;
downloadCache.Seek(0, SeekOrigin.Begin);
CachedSize = 0;
if (this.Status != DownloadStatus.Downloading || bytesSize == 0)
break;
}
downloadCache.Write(downloadBuffer, 0, bytesSize);
CachedSize …Run Code Online (Sandbox Code Playgroud) 我正在上应支持通过HTTP同时下载多个文件WPF下载管理器,添加新的下载,暂停/恢复,显示和更新每个下载过程的信息(文件名,大小,下载百分比,剩余时间.. .)在DataGrid中,显示ProgressBar中的进度和一堆其他内容.
因此,我们的想法是为每个下载过程使用一个单独的线程,并能够动态创建/取消线程.完成此任务的最佳方法是什么?使用BackgroundWorker,ThreadPool?
我正在创建一个下载管理器,我的WPF数据网格绑定到表示正在进行下载的对象集合(在单独的线程中).当我运行多个下载时,每个人都使用此代码每秒更新其datagrid项:
if (DateTime.Now > download.LastUpdateTime.AddSeconds(1))
{
this.downloadsGrid.Items.Refresh();
download.LastUpdateTime = DateTime.Now;
}
Run Code Online (Sandbox Code Playgroud)
Datagrid.Items.Refresh()完成了这项工作,但它重建了整个数据网格,导致所有下载在一秒内多次更新其他数据网格行,我不希望出现这种行为.有没有办法刷新数据网格中的特定行(项)?