Diskuze: Progress bar u stahování

C# .NET .NET (C# a Visual Basic) Progress bar u stahování American English version English version

Avatar
Matyáš Černohous (Matesak):

Zdravím, chtěl bych se zeptat jak udělat progressBar abych viděl jak postupuje stahování. Kód na stahování je zde:

rivate void button1_Click(object sender, EventArgs e)
        {
            WebClient client = new WebClient();

            string filename = "C:\\Program Files\\cesta\\xxxx.exe";

            try
            {
                client.DownloadFile(textBox1.Text, filename);
            }
            catch (WebException ex)
            {
                MessageBox.Show(ex.ToString(), "chyba", MessageBoxButtons.OK);
            }


        }

ale nevím jak udělat aby se progressBar.value updatoval podle % stažení.
díky

Editováno 15.4.2013 17:36
 
Odpovědět 15.4.2013 17:35
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Luboš Běhounek (Satik):

Event DownloadProgres­sChanged u webclienta.

http://msdn.microsoft.com/…gresschanged(v=vs.90).aspx

Editováno 15.4.2013 17:46
Nahoru Odpovědět  +1 15.4.2013 17:45
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Matyáš Černohous (Matesak):

Ještě bych měl jednu otázku, zjistil jsem si pomocí

string cesta=System.Reflection.Assembly.GetExecutingAssembly().Location;

aktuální pozici souboru, ale když to zadám do

client.DownloadFileAsync(new Uri("http://neco.cz/app.exe"), cesta);

tak se to nezačne stahovat. (Potřebuji ho nahradit novějším)

Editováno 15.4.2013 22:18
 
Nahoru Odpovědět 15.4.2013 22:17
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Luboš Běhounek (Satik):

Nemůžeš přehrát právě spuštěný soubor jiným. Většinou se to řeší tak, že je malá aplikace nebo skript, který to udělá za tebe.

Nahoru Odpovědět 15.4.2013 22:22
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Matyáš Černohous (Matesak):

To vím, ale je zajímaví že když zadám

string cesta = "cesta k souboru\\nazevprogramu.exe"

a pak použiju

client.DownloadFileAsync(new Uri("http://neco.cz/app.exe"), cesta);

tak to funguje

 
Nahoru Odpovědět 15.4.2013 22:33
Avatar
Odpovídá na Luboš Běhounek (Satik)
Matyáš Černohous (Matesak):

Jinak, kdybych po kliknutí na Aktualizovat zavřel tu hlavní app a otevřel "aktualizátor" který by to stáhnul a po dokončení stahování otevřel tu původní, aktualizovanou app, to by šlo ? A mohl bych nějak zjistit v "aktualizátoru" místo uložení hlavní app ?

 
Nahoru Odpovědět 15.4.2013 22:52
Avatar
Odpovídá na Luboš Běhounek (Satik)
Matyáš Černohous (Matesak):

A nevíš jak se dá zjistit v běžícím programu, místo uložení vypnutého programu.

 
Nahoru Odpovědět 16.4.2013 11:02
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Luboš Běhounek (Satik):

Musíš si ho nějak předat (nebo prohledat všechny disky, ale to je prasárna a nemáš jistotu, jestli jsi našel tu verzi, kterou hledáš, když by to měl uživatel v PC vícekrát.

Lepší je to umístění programu mít uložené v registrech nebo si to umístění předat při spouštění aktualizační aplikace - třeba přes spouštěcí argumenty.

Nahoru Odpovědět 16.4.2013 13:18
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Matyáš Černohous (Matesak):

Mě napadlo uložit si tu cestu do texťáku a pokaždým spuštění ji přepisovat, a uložení programu byych udělal tak, že bych načetl date z txt a pak bych to stáhnul tam, ale nevím jestli to bude fungovat :D

Editováno 16.4.2013 16:41
 
Nahoru Odpovědět 16.4.2013 16:41
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Luboš Běhounek (Satik):

Předej si to přes ty argumenty - když hlavní aplikace spouští tu updatovací, tak jí to předej v parametrech a pak v tý updatovací to v main() funkci je to pole strngů args .

Nahoru Odpovědět 16.4.2013 16:56
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Matyáš Černohous (Matesak):

S tímhle jsem ještě nedělal, jka bych to měl udělat ?

 
Nahoru Odpovědět 16.4.2013 17:03
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Luboš Běhounek (Satik):

Kdyz spoustis ten updatovaci program, tak mu muzes predat parametry

  • pokud to spoustis treba pres Process, tak
Process.Start("app.exe", "parametr - v tvem pripade cesta k updatovanemu souboru");

a tom updateru pak jen prectes ty stringy v metode main(String[] args) v args.

Nahoru Odpovědět  +1 16.4.2013 18:01
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Matyáš Černohous (Matesak):

Nevím jestli to dělám správně, ale nechce to fungovat.
V hlavní app je tohle :

      string filename = System.Reflection.Assembly.GetExecutingAssembly().Location;

private void button1_Click(object sender, EventArgs e)
       {
           Process.Start("C:\\Program Files\\Updater.exe", filename);
       }

a v updateru:

public Form1(String[] args)
       {
           InitializeComponent();
           string text = args.ToString();
       }
Editováno 16.4.2013 18:17
 
Nahoru Odpovědět 16.4.2013 18:17
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Luboš Běhounek (Satik):

Kod vypada dobre, nechce to fungovat?

Tak to uz vim, co tomu je.
Je to rozbity.

EDIT: jo, uz to asi vidim, ta funkce main je v program.cs, uz tam si musis vythanout v tom updateru to jmeno souboru.

Editováno 16.4.2013 18:25
Nahoru Odpovědět  +1 16.4.2013 18:24
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Matyáš Černohous (Matesak):

Snad už poslední otázka. První app spouštím s právy administrátora, ale pokud updater stahuje do program Files potřebuje taky administrátora, ale nevím jak to nastavit ( třeba aby před spuštěním updateru vyskočilo okno s volbou jestli to chce spustit jako admin, nebo ne)

 
Nahoru Odpovědět 16.4.2013 23:04
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.

Zobrazeno 21 zpráv z 21.