Ik ben bezig met een programma wat om de zoveel tijd gestart wordt een paar xml feeds inleest, kijkt of er wat nieuws en dat download naar me schijf.
Nu wil ik via een thread de downloads laten verlopen en de progressbar (standaard form component) updaten. Nu moet je daar voor invoken begreep ik.
Wat nu niet lukt is het aanmaken van events in threads. Als ik probeer de debuggen kom in de lus in en daarna kan ik niet meer zien wat er gebeurd... De progressbar wordt ook niet geupdate. Ik heb het ook al met een gewoon label geprobeerd en dat wou ook al niet werken.
Nu wil ik via een thread de downloads laten verlopen en de progressbar (standaard form component) updaten. Nu moet je daar voor invoken begreep ik.
Wat nu niet lukt is het aanmaken van events in threads. Als ik probeer de debuggen kom in de lus in en daarna kan ik niet meer zien wat er gebeurd... De progressbar wordt ook niet geupdate. Ik heb het ook al met een gewoon label geprobeerd en dat wou ook al niet werken.
C#:
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
49
50
51
| delegate void CallbackUpdateProgressDownload(int progress); private void frmMain_Load(object sender, EventArgs e { //start een nieuwe thread Thread thread = new Thread(new ThreadStart(Download)); thread.Start(); } private void Download() { //maak enumerator aan Dictionary<string, Mod>.Enumerator enumerator = mod.Mods.GetEnumerator(); //door loop de collectie while (enumerator.MoveNext()) { //nieuw webclient object WebClient client = new WebClient(); //event er hangen, kan dit zo? client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); //bestand downloaden aan de hand van een waarde in de collectie client.DownloadFile(enumerator.Current.Value.DownloadUrl, directory + "/download/" + enumerator.Current.Value.BuildName + ".zip"); } } private void updateProgress(int progress) { progressDownload.Value = progress; } //event void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { //kijk of hij geinvoked moet worden if (progressDownload.InvokeRequired) { //zoja delegeer hem door CallbackUpdateProgressDownload callback = new CallbackUpdateProgressDownload(updateProgress); } else { //anders update hem updateProgress(e.ProgressPercentage); } } |