Avatar billede thesurfer Nybegynder
03. juni 2006 - 07:43 Der er 20 kommentarer og
1 løsning

Kopier filer i eget program med progressbar

Jeg er igang med et lille program, der skal kunne kopiere filer.

Filerne vælges via en OpenFileDialog.
Destinationsmappen vælges via en FolderBrowserDialog

Disse oplysninger puttes over i en ListView, så brugeren kan se hvilke filer der skal kopiers hvor hen.

Mit program skal tage en fil ad gangen, fra ListView, og foretage kopieringen.
Den skal også kunne vise hvor meget der er kopierert, i form af en progressbar. Og senere en samlet oversigt, over progress på alle filerne i ListViewen.

Hvis noget er uklart, bed om at få det forklaret.. :-)

- Points er sat til "60 : Svær", men kan sættes yderligere op, da jeg har på fornemmelsen at det her er en meget svær opgave.
Avatar billede dr_chaos Nybegynder
03. juni 2006 - 09:00 #1
Bruger du c# 2.0 ?
Avatar billede thesurfer Nybegynder
03. juni 2006 - 14:29 #2
Doh! :-)
Det burde jeg havde skrevet..

Jeg bruger C# 2.0 / Microsoft Visual Studio 2005.
Avatar billede dr_chaos Nybegynder
03. juni 2006 - 14:46 #3
har du haft kig på background worker ?
Avatar billede thesurfer Nybegynder
03. juni 2006 - 14:48 #4
Negativt.

Det ved jeg ikke helt hvad er.. jeg kunne forestille mig, at det var en process eller tråd der arbejder i baggrunden, eller arebejder med ting der foregår i baggrunden.. :-)

Har du nogen links med eksempler? - Jeg kunne selvfølig også søge på nettet.. men det ville bare være hurtigere, hvis du havde forslag..
Avatar billede dr_chaos Nybegynder
03. juni 2006 - 14:51 #5
Her er et simpelt eksempel:
using System.ComponentModel;
public class Form1
{
private BackgroundWorker worker;

private void Form1_Load(object sender, System.EventArgs e)
{
  worker = new BackgroundWorker();
  worker.WorkerReportsProgress = true;
  worker.DoWork += new DoWorkEventHandler(new DoWorkEventHandler(OnWork));
  worker.ProgressChanged += new ProgressChangedEventHandler(new ProgressChangedEventHandler(OnProgressChanged));
}

private void OnWork(object sender, DoWorkEventArgs e)
{
  int I;
  for (int I = 1; I <= 100; I++) {
    System.Threading.Thread.Sleep(10);
    worker.ReportProgress(I);
  }
}

private void OnProgressChanged(object sender, ProgressChangedEventArgs e)
{
  Invoke(new ChangeProgressBarHandler(/* might be wrong, please check */ new EventHandler(ChangeProgressbar)), e.ProgressPercentage);
}
private delegate void ChangeProgressBarHandler(int percentage);

private void ChangeProgressBar(int percentage)
{
  ProgressBar1.Value = percentage;
}

private void Button1_Click(object sender, System.EventArgs e)
{
  worker.RunWorkerAsync();
}
}
Avatar billede dr_chaos Nybegynder
03. juni 2006 - 15:04 #6
Den er oversat fra vb:
http://www.codeguru.com/csharp/csharp/cs_syntax/threading/article.php/c10755/#more

I OnWork
kan du starte med at med at kopirer dine filer.
Du kan evt have 2 progressbars en som viser samlet upload og den enkelte fil
Avatar billede thesurfer Nybegynder
03. juni 2006 - 15:14 #7
Jeg takker for dine forslag, og kigger på dem lidt senere.
Avatar billede dr_chaos Nybegynder
03. juni 2006 - 15:16 #8
helt iorden :)
Avatar billede thesurfer Nybegynder
04. juni 2006 - 19:41 #9
Jeg vil lige skrive, at vi er igang med eksamensperioden, og det kan godt være, at jeg ikke svarer med det samme..

Men jeg vil teste det, så snart jeg får tid til det.
Avatar billede dr_chaos Nybegynder
04. juni 2006 - 19:43 #10
hehe kender det godt :)
Er selv lige blev færdig som IT ingeniør :)
Avatar billede thesurfer Nybegynder
11. juni 2006 - 18:23 #11
Jeg har ikke glemt.. der går lige noget tid, inden jeg har tid igen..

Men ja, det ser ud til at være background worker jeg skal have fat i..
Avatar billede dr_chaos Nybegynder
11. juni 2006 - 18:37 #12
tillader mig lige at smide et svar hvis du nu bruger det.
Avatar billede thesurfer Nybegynder
11. juni 2006 - 18:40 #13
Helt iorden :-)
Avatar billede thesurfer Nybegynder
25. juli 2006 - 00:06 #14
Jeg har ikke fået testet det endnu, da jeg har arbejdet fuldtid, og har haft "småtravlt"..

Men jeg har ikke glemt dette spørgsmål (det står jo under mine oprettede spørgsmål).. :-)
Avatar billede dr_chaos Nybegynder
25. juli 2006 - 08:05 #15
:)
Jeg har intet problem med at vente
Avatar billede thesurfer Nybegynder
04. august 2006 - 20:22 #16
Jeg har ikke fået testet det endnu, men har lige kigget lidt på dit eksempel..

Denne del:
private void OnWork(object sender, DoWorkEventArgs e)
{
  int I;
  for (int I = 1; I <= 100; I++) {
    System.Threading.Thread.Sleep(10);
    worker.ReportProgress(I);
  }
}

1) Det er bare en test del?

2) Er dette eksempel et fungerende eksempel?
Avatar billede dr_chaos Nybegynder
05. august 2006 - 18:20 #17
ja det er en test del og det er et fungerende eksempel.
Avatar billede thesurfer Nybegynder
28. august 2006 - 21:34 #18
Hejsa..

Jeg har stadigvæk ikke testet det.. men vi er begyndt at lege med tråde, delegation og andet snask.. så jeg regner med at jeg tester det snart.

Jeg vender tilbage til dette spørgsmål engang imellem, så du ved at jeg ikke glemmer dig.. :-)
Avatar billede dr_chaos Nybegynder
28. august 2006 - 21:56 #19
hehe jeg løber ingen steder.
Avatar billede thesurfer Nybegynder
26. oktober 2006 - 00:00 #20
Jeg fik aldrig brugt BackgroundWorker til noget, da jeg gik over til at læse filen binært, via en tråd.

Men du får points for dit forslag.
Avatar billede dr_chaos Nybegynder
26. oktober 2006 - 09:48 #21
ok tak :) du kunne også have ladet bgw læse filen.
Hvis det skulle være.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester