Diskuze: kopírování souborů s progress barem

C# .NET .NET (C# a Visual Basic) kopírování souborů s progress barem American English version English version

Avatar
rrepin15
Člen
Avatar
rrepin15:

Ahoj, ve svem programu chci zkopírovat soubory a mít u toho progress bar. Mělo by to fungovat tak, že mam tabControl a na jedné strance je tlačítko zkopírovat a když se na něj klikne, tak to přepne na další stránku s progress barem a soubory se začnou kopírovat, progress bar ukazovat postup a pak je tam ještě text ktery ukazuje, ktery soubor se zrovna kopíruje.Jakmile kliknu na tlačítko zkopírovat, tak se kromě progress baru(ktery funguje až se kopírování dokončí)nic nenačte.Všechno až se zkopírujou soubory(ty se opravdu zkopírujou, pak to vypíše i ten naposledy zkopírovaný soubor).No a tak vás prosím s tímto bugem o pomoc. Předem děkuji.

string path;


        public Form1()
        {
            InitializeComponent();

            tbpath.Text = @"C:\Program Files (x86)\hra";
            path = tbpath.Text;
        }

        public void Instal()
        {
            List<string> filescopy = new List<string>();
            filescopy.Add("hra.iso");
            filescopy.Add("nějaky soubor.kj");
            filescopy.Add("program.dll");
            filescopy.Add("knihovna.dll");
            filescopy.Add("1.txt");
            filescopy.Add("2.txt");

            progressBar1.Maximum = filescopy.Count;

            for (int i = 0; i < filescopy.Count; i++)
            {
                if (i == filescopy.Count - 1)
                {
                    tabControl1.SelectedTab = tpfinish;
                }

                if (!File.Exists(path + filescopy[i]))
                {
                    progressBar1.Value = i + 1;
                    File.Copy(filescopy[i], path + filescopy[i]);
                    fileIsCopy.Text = filescopy[i];
                }
            }
        }


        private void prochazet_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog f1 = new FolderBrowserDialog();
            f1.ShowDialog();
            tbpath.Text = f1.SelectedPath;
        }

        private void instalovat_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedTab = tpinstal;
            Instal();
        }
 
Odpovědět 10.8.2015 14:20
Avatar
rrepin15
Člen
Avatar
rrepin15:

Tak ten Progress bar funguje ale nic jineho se nenačte.

 
Nahoru Odpovědět 10.8.2015 14:28
Avatar
b.zguris
Člen
Avatar
b.zguris:

Skus toto

public delegate void IntDelegate(int Int);

public static event IntDelegate FileCopyProgress;
public static void CopyFileWithProgress(string source, string destination)
{
    var webClient = new WebClient();
    webClient.DownloadProgressChanged += DownloadProgress;
    webClient.DownloadFileAsync(new Uri(source), destination);
}

private static void DownloadProgress(object sender, DownloadProgressChangedEventArgs e)
{
    if(FileCopyProgress != null)
        FileCopyProgress(e.ProgressPercentage);
}
 
Nahoru Odpovědět 10.8.2015 15:09
Avatar
vodslon
Člen
Avatar
Odpovídá na rrepin15
vodslon:

Ahoj, já v tom nevidím chybu, kdyby to byla chyba Threadu, tak to padne. Zkus to bez těch tabů, když si to krokuješ mění se Ti ta hodnota, nemohl si něco přehlídnout?

 
Nahoru Odpovědět 10.8.2015 15:37
Avatar
rrepin15
Člen
Avatar
Odpovídá na vodslon
rrepin15:

Na ten tab s tou instalací jsem dal tlačítko a když se na něj klikne tak se to začne instalovat ale stejně to neukazuje který soubor se kopíruje.

 
Nahoru Odpovědět 10.8.2015 15:45
Avatar
Odpovídá na rrepin15
sadlomaslox25:

nemuzes kopirovat a upravovat GUI na jednom vlakne. ta operace File.Copy zasekne volajici vlakno, v tomto pripade UI vlakno, takze jednak se aplikace seka pri kopirovani a taky se proste nestihne prepisovat ten text protoze tam mas smycku. musis spustit kopirovani na jinem vlakne nez UI a pak pomoci metody Invoke volat aktualizace UI.

 
Nahoru Odpovědět  +2 10.8.2015 19:10
Avatar
vodslon
Člen
Avatar
Odpovídá na rrepin15
vodslon:

Ahoj, moje odpověd je zbytečná, správně to píše sadlomaslox25, já jsem jezdil nahoru a dolů, tak jsem si to četl tak, že máš to copy async.

 
Nahoru Odpovědět 11.8.2015 7:57
Avatar
Odpovídá na rrepin15
Michal Štěpánek:

Na toto je nejjednodušší použít BackGroundWorker

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 11.8.2015 9:38
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
rrepin15
Člen
Avatar
rrepin15:

Děkuju všem, zkusím s tím něco udělat.

 
Nahoru Odpovědět 14.8.2015 20:57
Avatar
rrepin15
Člen
Avatar
rrepin15:

Až to dodělám tak na to udělám tutorial protože žádný pořádný jsem nenašel :-)

 
Nahoru Odpovědět 14.8.2015 21:10
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na rrepin15
Jan Vargovský:

http://www.itnetwork.cz/…groundworker

Nevím co v tom je, protože to je premiový článek, ale třeba tam něco najdeš :D

 
Nahoru Odpovědět 14.8.2015 22:24
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 11 zpráv z 11.