tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
21242
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Alexander12
    Alexander12 Alexander12 ist offline Mitglied Smaragd
    Registriert seit
    Jul 2005
    Ort
    Tutorials.de
    Beiträge
    1.143
    Hallo @ all:

    Ich hab' ein kleines Programm gemacht, dass Dateien per File.Copy() kopiert.
    Kann ich da eigentlich auch noch 'ne ProgressBar in mein Form machen, dass den Fortschritt anzeigt, weil bei großen Dateien bleibt das Form hängen ...
    Kann man die Datei z.B. in 2 MB große Stücke teilen, die das Programm nacheinander kopiert un dann im Zielordner wieder zusammensetzt?
    Hab' auch schon was von Threading gehört und auch schon im Forum gesucht, habe aber nichts gefunden.

    Hat jemand ein paar Codefetzen, die mir helfen könnten?

    MfG Alexander12
     

  2. #2
    zovax zovax ist offline Mitglied Gold
    Registriert seit
    Jun 2004
    Ort
    Koblenz (Rheinland-Pfalz)
    Beiträge
    217
    Eine Progressbar aendert auch nichts an der Tatsache, dass dein Programm solange unerreichbar ist, bis die Datei kopiert ist. Das kopieren muss in einem Nebenthread erfolgen, egal ob mit oder ohen Progressbar. Ich denke, dass die Trhead Klasse (System.Threading.Thread) relativ selbsterklaerend ist.

    Du instanziierst ein neues Thread-Objekt und uebergibst ihm die Methode die in diesem Thread ausgefuehrt werden soll (in deinem Fall die Kopier-Methode). Dann startest du den Thread via Thread.Start();

    Sollte aehnlich dem hier aussehen (nicht hauen bei Fehlern, hab auch nicht die MSDN im Kopf und kein VS drauf :)):
    Code :
    1
    2
    3
    
    Thread t = new Thread(new ThreadStart(CopyFiles));
    t.Start();
    //Weitere Anweisungen fuer den Hauptthread
     

  3. #3
    Avatar von Alexander12
    Alexander12 Alexander12 ist offline Mitglied Smaragd
    Registriert seit
    Jul 2005
    Ort
    Tutorials.de
    Beiträge
    1.143
    Hallo,

    Gut, das habe ich verstanden. Ich habe 'ne Datei (1,3 Gigabyte) kopiert. Das Programm bleibt jetzt nicht mehr hängen und es funktioniert perfekt!
    Aber wie kriege ich jetzt die progressbar rein, die den Fortschritt des Kopiervorgangs abruft, denn bei so einer großen Datei dauert das schon sehr lange ...
    Das Programm arbeitet zwar Perfekt weiter, aber man weiß ja dann nicht wie viel schon kopiert ist ...

    Hier ist mein Code:

    Code :
    1
    2
    
    using System.Threading;
    using System.IO;
    [...]
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    public static void CopyFiles()
    {
    try
    {
           string path = @"c:\Test.txt";
           string path2 = @"c:\Dokumente\Test.txt";
           System.IO.File.Copy(path, path2);
    }
    catch
    {
           MessageBox.Show("Kopieren fehlgeschlagen!");
    }
    }
     
     
    private void button1_Click(object sender, EventArgs e)
    {
           Thread t = new Thread(new ThreadStart(CopyFiles));
           t.Start();
    }

    Danke schon Mal für die Antworten!
     

  4. #4
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Hi.

    Da wirst du dir eine eigene Copy Methode schreiben müssen.

    Öffnest die Datei und dort wo die Kopie sein soll erstellst eine neue. In einer Schleife fürst dann die folgenden Aufgaben solange aus bis das letzte Bit übertragen ist.
    • Gewisse Anzahl an Bytes lesen
    • Gelesenen Bytes die neue Datei schreiben
    • Step Methode von der Progressbar aufrufen

    MfG,
    Alex
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  5. #5
    Avatar von Alexander12
    Alexander12 Alexander12 ist offline Mitglied Smaragd
    Registriert seit
    Jul 2005
    Ort
    Tutorials.de
    Beiträge
    1.143
    Hi Alex,

    Hast du da evtl. 'nen Code, der mir witerhelfen könnte, hab so was noch nicht gemacht,
    bisher hab ich nämlich nur kleine Dateien (*.txt) mit dem einfachen File.Copy() kopiert ...

    MfG Alexander12
     

  6. #6
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Schau dir einfach die Stream und alle davon abgeleiteten Klassen an.

    In deinem Thread zum Dateiversand übers Netzwerk habe ich dir einen Thread verlinkt in dem sowas gemacht wurde. Dort wird auch mit Streams gearbeitet, ist so ziemlich das gleiche nur das du halt diesmal einen Stream hast der auf eine Datei zeigt.
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  7. #7
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Hallo Alexander12!

    Ich hab heut leider auch nicht so die Zeit.
    Hier siehst, wie Du deinen Thread überwachen und stoppen kannst.
    Thread Hilfe, wie beenden - Thread
    Bau da ein Event ein damit Du den aktuellen AusführungsStatus überwachen kannst.

    MfG, cosmo
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  8. #8
    Avatar von Alexander12
    Alexander12 Alexander12 ist offline Mitglied Smaragd
    Registriert seit
    Jul 2005
    Ort
    Tutorials.de
    Beiträge
    1.143
    Hi.

    Danke für eure Antworten, werde mir das gleich mal anschaun.

    @Alexander Schuc:

    Danke für den Tipp mit den Streams, haben mich echt weitergebracht!

    @Cosmo:

    Danke für die Infos für Threads, jetzt bin ich ja rund um versorgt!

    MfG Alexander12
     

Ähnliche Themen

  1. Webcam durch Website aktivieren & steuern
    Von YelloW22 im Forum Flash Plattform
    Antworten: 0
    Letzter Beitrag: 10.01.11, 16:39
  2. Progressbar steuern bei Multithreading
    Von dborni im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 13.04.10, 17:24
  3. Antworten: 1
    Letzter Beitrag: 01.10.09, 15:38
  4. SWT Progressbar und Threads
    Von kleene0105 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 01.07.08, 08:10
  5. GUI durch MIDI steuern
    Von DJLopez im Forum Audiotechnik, Recording & Audio-Software
    Antworten: 0
    Letzter Beitrag: 11.02.08, 17:34