Hallo,
ich habe ein kleines Problem mit C#.
Ein Nutzer ruft durch den Klick auf einen Menüeintrag eine neue Form auf. Das onLoad-Ereignis dieser Form setzt unter anderem eine Progressbar in Bewegung, und zwar unter Verwendung von "ProgressBarStyle.Marquee".
progressBar1.Style = ProgressBarStyle.Marquee;
ReadXmlFile("http://www.wunschname.de/neu.xml");
Die Anweisung, die nach der Style-Zuweisung steht, lädt eine XML-Datei aus dem Internet (mit System.Xml), die Funktion ReadXmlFile ist von mir selbst geschrieben worden. Nun, sie enthält auch nichts Weiteres, was für meine Frage wichtig sein könnte.
Wenn ich diese zwei Anweisungen so im onLoad-Ereignis belasse, sieht der Benutzer die Progressbar nie, ich denke, auch bei einer langsamen Internetverbindung nicht. Denn das neue Fenster wird erst angezeigt, wenn die Datei "vollständig" heruntergeladen wurde, und dann wurde die Progressbar schon längst durch den Inhalt der XML-Datei ersetzt.
Ich will aber, dass die Progressbar mindestens x Sekunden sichtbar ist. Wenn ich versuche, das mit "System.Threading" zu lösen, klappt es leider auch nicht wie gewünscht.
Ich würde mich auf eine Antwort sehr freuen,
qwertz
du führst die Aktionen ja auch im onLoad ereignis aus. Die Form wird erst nach dem ereignis angezeigt. ich würde dir das Shown ereignis empfehlen.
Vielen Dank für euere Antworten!
Mit dem Shown-Ereignis habe ich es auch schon probiert, jedoch blitzt die Progressbar dann nur kurz auf und wird sofort ersetzt. Hier wäre wohl eine zeitversetzte Ausführung nötig.
herbivore:
In allen Fällen ist zu beachten, dass von dem Thread nicht direkt auf das GUI zugegriffen werden darf. Mein Problem ist, dass ich genau bei diesen Funktionen zwingend auf GUI-Elemente zugreifen muss.
Viele Grüße,
qwertz
Hallo qwertz,
wie das geht, steht ja auch in der FAQ: Controls von Thread aktualisieren lassen (Invoke-/TreeView-Beispiel)
herbivore
Grr, ich komme damit irgendwie nicht zurecht.
Ich habe die Anweisung "ReadXmlFile" jetzt in das Shown-Ereignis gesetzt, soweit funktioniert auch alles wunderbar.
Jetzt hätte ich allerdings noch gerne eine künstliche Verzögerung von x Sekunden.
Ist das wirklich so kompliziert?
Viele Grüße,
qwertz
Hallo qwertz,
Ich habe die Anweisung "ReadXmlFile" jetzt in das Shown-Ereignis gesetzt, soweit funktioniert auch alles wunderbar.
Kann ich mir eigentlich nicht vorstellen, zumindest dann nicht wenn das einlesen länger dauert, müsste in der Zeit dein GUI blockiert sein. Das ist nicht gut.
Jetzt hätte ich allerdings noch gerne eine künstliche Verzögerung von x Sekunden.
Ist das wirklich so kompliziert?
Nö, Timer.
herbivore
Wozu künstliche Verzögerungen? 😜
Kann ich mir eigentlich nicht vorstellen, zumindest dann nicht wenn das einlesen länger dauert, müsste in der Zeit dein GUI blockiert sein. Das ist nicht gut. OK, dann also doch ein zweiter Thread.
Aber ich verstehe nicht ganz, wie ich die Tipps aus den FAQ bezüglich der Verwendbarkeit von GUI-Elementen in einem zweiten Thread in meinem Fall verwenden soll, da es sich ja doch um einen anderen Zweck handelt.
Viele Grüße,
qwertz
Hallo qwertz,
wieso anderer Zweck? Scheint mir bei dir alles der klassische Fall zu sein.
Aber selbst wenn ein anderer Zweck: Der Zweck spielt doch keine Rolle.
herbivore
Das mag sein, aber mir wird aus dem genannten Beispiel nicht ganz klar, welche Code-Schnipsel ich jetzt konkret brauche, um von einem zweiten Thread aus auf GUI-Elemente zugreifen zu können.
Ich hoffe, du weißt, was ich meine,
Viele Grüße,
qwertz
Hallo qwertz,
die, wo Invoke benutzt wird. Das sollte aber aus der Beschreibung eigentlich klar sein, oder? 🙂
herbivore