Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Aktivity
Avatar
rrepin15
Člen
Avatar
rrepin15:10.8.2015 14:20

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:10.8.2015 14:28

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:10.8.2015 15:09

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:10.8.2015 15:37

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:10.8.2015 15:45

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:10.8.2015 19:10

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
10.8.2015 19:10
Avatar
vodslon
Člen
Avatar
Odpovídá na rrepin15
vodslon:11.8.2015 7:57

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:11.8.2015 9:38

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

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
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:14.8.2015 20:57

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:14.8.2015 21:10

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ý
Tvůrce
Avatar
Odpovídá na rrepin15
Jan Vargovský:14.8.2015 22:24

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.