小编mar*_*rko的帖子

计算当前(不是平均)下载速度

在我的下载管理器应用程序中,我正在使用以下代码来计算当前传输速率:

        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)不感兴趣,因为它无法给出真实的结果。

c# download download-manager

5
推荐指数
1
解决办法
7983
查看次数

下载管理器 - 限制下载速度

我需要为我的文件下载器应用程序实现下载速率限制,并且我已经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)

.net c# download stream download-manager

5
推荐指数
1
解决办法
5765
查看次数

C#中的多线程下载器

我正在上应支持通过HTTP同时下载多个文件WPF下载管理器,添加新的下载,暂停/恢复,显示和更新每个下载过程的信息(文件名,大小,下载百分比,剩余时间.. .)在DataGrid中,显示ProgressBar中的进度和一堆其他内容.

因此,我们的想法是为每个下载过程使用一个单独的线程,并能够动态创建/取消线程.完成此任务的最佳方法是什么?使用BackgroundWorker,ThreadPool?

c# multithreading download-manager

2
推荐指数
1
解决办法
2142
查看次数

更新WPF Datagrid中的单行

我正在创建一个下载管理器,我的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()完成了这项工作,但它重建了整个数据网格,导致所有下载在一秒内多次更新其他数据网格行,我不希望出现这种行为.有没有办法刷新数据网格中的特定行(项)?

c# wpf wpfdatagrid

2
推荐指数
2
解决办法
1万
查看次数