Hallo Chiyoko,
anbei ein kleines Testprogramm:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.ComponentModel;
namespace ConsoleApplication1 { class Program {
static void Main(string[] args) { BackgroundWorker back = new BackgroundWorker(); back.WorkerReportsProgress = true; back.DoWork += new DoWorkEventHandler(back_DoWork); back.ProgressChanged += new ProgressChangedEventHandler(back_ProgressChanged); back.RunWorkerCompleted += new RunWorkerCompletedEventHandler(back_RunWorkerCompleted); back.RunWorkerAsync(); Console.Read(); }
static void back_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Console.WriteLine("FERTIG"); }
static void back_ProgressChanged(object sender, ProgressChangedEventArgs e) { Console.WriteLine(e.ProgressPercentage.ToString()+" Prozent"); }
static void back_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker b = sender as BackgroundWorker; Console.WriteLine("IN_DoWork"); for (int x = 0; x < 100; x++) { b.ReportProgress((x * 100) / 100); } } } } |
Zum einen muss Dein "Thread.Sleep" in der Schleife und nicht hinter der Schleife platziert werden.
Zum anderen ist mir bei meinem Testprogramm aufgefallen, dass die Zahlen von 1 bis 100 nicht in der korrekten Reihenfolge erscheinen, wenn ich das "Thread.Sleep(100)" weglasse.
Ich bin leider bzgl. Multi-Threading zu unerfahren, um Dir hier sichere Tips zu geben. Allerdings wäre mir ein Thread.Sleep zu unsicher. Woher weiß ich, welche Sleep-Dauer ich benötige, damit das Programm JEDES MAL richtig läuft.
Eine Art Thread.Join() müsste irgendwo hin, aber das sollte vielleicht nochmal jemand erläutern, der hier wirklich fit ist.
Gruß
Frank