Zdravim,
tak píši zase. Potřeboval bych pomoct s Asynchronním stahováním.
Potřeboval bych script upravit tak aby:
Zobrazoval ty toolStripStatusy, protože vždycky při stahování se
zobrazí jen ten první a další jako by nebyly.
Potřeboval bych upravit aby se dalo nastavit, že každý soubor, který to
stáhne tak uloží do jiného adresáře.
A potřeboval se zeptat jestli když pod to přidám podmínku pro
zaškrtnutý checkBox že to stáhne jen když bude zaškrtnutý nebo se to bude
muset taky nějak upravit.
A poslední věc, že ukazatel by zobrazoval celkový průběh do konce, ne
jak teď to zobrazuje průběh do konce každého souboru.
Ten text měníš na špatným místě - ty změníš text, pak přidáš
název souboru do seznamu, pak změníš text, zase přidáš název souboru do
seznamu a pak nakonec necháš stáhnout soubory z toho seznamu. Takže asi tu
změnu textu budeš muset přemístit, ideálně asi do completed.
Předpokládám, že Urls je List<String>. Použij místo toho třeba
Dictionary<string, string> a klíč použij jako jméno stahovaného
souboru a hodnotu jako složku, kam chceš stahovat.
Samozřejmě, proč by nefungovala?
Musel bys na začátku znát celkovou velikost. Asi nejjednodušší je
udělat si nějaký speciální dotaz, kterým by ses zeptal a server tu
velikost znal a poslal ji.
DownloadFile si uprav, abys mohl zadávat, kam se má stahovat
DownloadFile(Urls[0].Key, Urls[0].Value); // použití
privatevoid DownloadFile(string Url, string Destination) // upravená metoda pro stahování
{
//... vnitřek pak upravíš, aby se bral v potaz destination a stahuješ ten soubor tam
}
píše chybu: Error 1 The best overloaded method match for
'System.Collections.Generic.Dictionary<string,string>.this[string]'
has some invalid arguments Error 2 Argument 1: cannot convert from 'int' to 'string' Error 3 The best overloaded method match for
'System.Collections.Generic.Dictionary<string,string>.this[string]'
has some invalid arguments Error 4 Argument 1: cannot convert from 'int' to 'string'
Trochu se snaž, zamysli se, nebudu to psát celý za tebe
(ano, musíš tam samozřejmě nějak zapracovat to, že to nestahuješ
napevno někam, ale že to stahuješ na místo, který ti přišlo jako parametr
funkce)
tomuhle bych se být tebou zatím asi vyhnul, jinak bych to řešil tak, že
se klient nejdřív zeptá serveru postupně na velikosti těch souborů, sečte
si je a pak to číslo používá pro ten ukazatel, ale musel bys i na serveru
přidat nějakou funkčnost, která bude posílat velikost souboru, když se
klient zeptá.
Webclientovi jako jeden z parametrů při stahování souboru zadáváš, kam
má soubor stahovat.
Co to nějak zkombinovat s tím, že máš dictionary, ve kterém máš záznamy
jmen souborů (jako klíč) a k nim (jako hodnotu) místo, kam se mají
stáhnout?
Vím že to musí být v Completed. V tom Completed asi musí být nějaká
podmínka která zjišťuje který soubor se právě stahuje a podle toho to
vypíše v tom statusu ne? Ale jak to udělat.
a zmáčkni CTRL+MEZERNÍK, vyjede ti nabídka, co všechno má e k
dispozici, tak se tam podívej, jestli tam někde není url stahovaného odkazu
nebo název souboru
Myslím, že by jsi si nejdřív měl projít tutoriály (třeba tady na
devbooku) a naučit se základy, než začneš psát aplikace, který maj něco
stahovat z internetu
Jo já vím, ale když nějakou aplikaci nutně potřebuješ tak si jí
musíš vytvořit. Nevěděl jsem že stahování z Internetu bude tak
komplikované, jako první způsob jsem totiž používal to neasynchronní
stahování, ale to aplikaci zasekávalo, tak jsem se dozvěděl, že
asynchronní stahování aplikaci zasekávat nebude. Myslel jsem, že se to
nastavuje podobně jako normální neasynchronní stahování. Kdybych zjistil,
že je to tak složité, tak bych se do toho ani nepouštěl.
Proto tě prosím o poslední dvě věci:
Jak tedy udělat aby ty toolstripstatusy fungovaly.
Kam umístit MessageBox o dokončení stahování souborů.
Asi ne. Protože je evidentní, že netušíš co vlastně děláš, takže
ti ani moc rady není. Leda bys poslal zadání aněkdo ti to třeba
naprogramuje, ale nevím, proč by to dělal zadarmo.
AsyncCompletedEventArgs má vlastnost UserState, takže třeba v
downloadfile si do ní uložíš třeba název souboru nebo číslo a pak v
completed ji přečteš.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.