Našel jsem hezký anglický článek o této problematice ve VB.NET: http://www.eggheadcafe.com/articles/2002... co se týká počítání zbývajícího času, je třeba nejdříve zjistit rychlost. Já to dělám tím způsobem, že si zavedu desetinnou a časovou proměnnou na úrovni třídy a timer. Při začátku přenosu do časové proměnné uložím hodnotu Now a timer nastavím na interval 1 sekundu a spustím ho. Do časované procedury potom přijde toto:
rychlost = (preneseno - cislo) / Now.Subtract(cas).TotalSeconds
cislo = preneseno
Nyní tedy máme přenosovou rychlost za poslední sekundu uloženou v proměnné rychlost a zbývá nám jen výpočet zbývajícího času, pro ten potřebujeme ještě znát celkovou velikost souboru:
Dim t as Timespan = Timespan.FromSeconds(velikost / rychlost)
zbyva = Microsoft.VisualBasic.Right("00" + t.Hours.ToString(), 2) + ":" + Microsoft.VisualBasic.Right("00" + t.Minutes.ToString(), 2) + ":" + Microsoft.VisualBasic.Right("00" + t.Seconds.ToString(), 2)
Takže pokud tohle přidáte na konec časované procedury, měl by se vám do proměnné zbyva vyplnit přesný čas do konce přenosu ve formátu 00:00:00. Musíte ale zjistit: a) čas začátku stahování => proměnná cas b) počet přenesených bajtů / kilobajtů => proměnná preneseno c) celkovou velikost souboru (bajty / kilobajty) => proměnná velikost Vím, že to není nejlepší způsob, ale funguje to Hodně štěstí P.S. Pokud chcete, aby byly zobrazované hodnoty stabilnější a reálnější, doporučuji ze zjištěných rychlostí vyrobit rychlost průměrnou (řekněme za minutu), ta se potom bude míň "hýbat"...
|