Hi,
ich habe ein Problem mit C#, das lautet wie folgt:
Ich moechte mittels eines WebClients eine Datei auf einen Server via FTP hochladen und den Fortschritt auslesen koennen. Dafuer nutze ich die client.UploadFileAsync Methode und aboniere das UploadProgressChanged Event
C#-Quelltext
1:
| client.UploadProgressChanged += new UploadProgressChangedEventHandler(UploadProgressCallback); |
In diesem Event kann ich dann wunderbar die schon uebertragene Datenmenge und den Fortschritt auslesen
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private static void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e) { int gesendet = e.Bytes.Send; int gesammt = e.TotalBytesToSend; int fortschritt = e.ProgressPercentage; } |
Das Problem:
Das Event muss, warumm auch immer ein statisches Feld sein. Das bringt das Problem mit sich, dass ich aus diesem Event aus nicht auf meine Steuerelemente auf der Form zugreifen moechte. Ich kann auch nicht einfach einen int fuer die jeweiligen Werte global deklarieren, aus dem Event kann ich auch darauf nicht zugreifen. Das ist sehr schlecht, da ich den Fortschritt und die bereits gesendete Datenmenge auf der WinForm auf einem Label bzw den Fortschritt auf einer ProgressBar ausgeben moechte.
In meinem ersten Funktionstest auf der Console war das ganze kein Problem, da konnte ich die Werte auf der Console ausgeben.
Jetzt ist nur die Frage:
Wie kann ich auf meine WinForm Controls zugreifen? Einfach "static" entfernen ist nicht, dann erhalte ich die Fehlermeldung dass das Event ein statisches Feld sein muss...
In Visual Basic habe ich dasselbe schonmal gecodet, also einen Datenupload via WebClient mit dem UploadChanged event. Da habe ich einfach einen WebClient mit Events deklariert und dann ein Sub gehabt in dem ich, wie unter C# im UploadProgressChanged Event den Fortschritt auslesen konnte. Dabei hatte ich jedoch keine Probleme mit einem statischen Feld.
Hoffe jemand weiß Rat...
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt