Laden...

Funktion zeitversetzt ausführen

Erstellt von qwertz vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.202 Views
Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren
Funktion zeitversetzt ausführen

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

F
10 Beiträge seit 2007
vor 16 Jahren

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.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo qwertz,

siehe [FAQ] Warum blockiert mein GUI?

herbivore

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo qwertz,

wie das geht, steht ja auch in der FAQ: Controls von Thread aktualisieren lassen (Invoke-/TreeView-Beispiel)

herbivore

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

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

630 Beiträge seit 2007
vor 16 Jahren

Wozu künstliche Verzögerungen? 😜

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

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

Q
qwertz Themenstarter:in
49 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo qwertz,

die, wo Invoke benutzt wird. Das sollte aber aus der Beschreibung eigentlich klar sein, oder? 🙂

herbivore