Katzenbauer
Erfahrenes Mitglied
Hallo,
ich habe mir ein Programm geschrieben, dass eine Datei per http hochlädt (als Bestandtteil eines Formulars). Das klappt soweit ganz gut nur soll das Programm auch den Fortschritt des Uploads anzeigen.
Ich mache das folgendermaßen:
Ich baue ein http Packet per HttpWebRequest und schicke das dann an den Server. Bisher passiert das ganze synchron also im Gui Thread, was natürlich suboptimal ist, da bei einer größeren Datei das Programm ziemlich lange blockiert werden würde.
Also habe ich vor die ganze Uploadfunktion() in einen eigenen Thread auslagern. Soweit so gut. Nur wie kann ich jetzt den Status des Uploads abfragen?
In der Uploadfunktion befindet sich eine Schleife, die zu sendende Datei in 8 KB happen ließt und über den Stream schickt:
Also habe ich mir gedacht: Prima das kann man locker in der Schleife erledigen. Nur leider läuft die sofort durch, woran auch ein Flush() nichts ändert.
Da muss es doch was geben. Gibt ja genug Progamme die etwas ähnliches machen.
ich habe mir ein Programm geschrieben, dass eine Datei per http hochlädt (als Bestandtteil eines Formulars). Das klappt soweit ganz gut nur soll das Programm auch den Fortschritt des Uploads anzeigen.
Ich mache das folgendermaßen:
Ich baue ein http Packet per HttpWebRequest und schicke das dann an den Server. Bisher passiert das ganze synchron also im Gui Thread, was natürlich suboptimal ist, da bei einer größeren Datei das Programm ziemlich lange blockiert werden würde.
Also habe ich vor die ganze Uploadfunktion() in einen eigenen Thread auslagern. Soweit so gut. Nur wie kann ich jetzt den Status des Uploads abfragen?
In der Uploadfunktion befindet sich eine Schleife, die zu sendende Datei in 8 KB happen ließt und über den Stream schickt:
Code:
// file is a filestream and httpStream the networkstream ;)
byte[] buffer = new byte[bufferSize];
int bytesToRead = bufferSize;
int bytesRead;
do
{
// not enough bytes here to fill the whole buffer
if ((file.Length - file.Position) < bufferSize)
{
bytesToRead = (int)(file.Length - file.Position);
}
bytesRead = file.Read(buffer, 0, bytesToRead);
httpStream.Write(buffer, 0, bytesRead);
} while (bytesRead == bufferSize);
Da muss es doch was geben. Gibt ja genug Progamme die etwas ähnliches machen.