Problem mit Timer

wertzui

Mitglied
Hallo
Ich habe ein Problem mit einem Timer in einem Splashscreen.
Ich habe den Code hier geparsed: http://wilcoding.xs4all.nl/Wilco/Pastecode.aspx?pasteID=803

Und zwar scheint es so, als würden die Variablen nicht an das neue Form übergeben, wenn das ganze in dem OnTimer() Event steht.
Tue ich das aber in Form2_Load() funktioniert alles pima.

Wäre schön, wenn jemand ne Lösung dafür hätte.
(Bitte Berücksichten, dass ich C# Neuling bin ;) )
 
Hi.

Was soll denn das eigentlich werden? Wozu soll denn alle 10 Sekunden ein neues Form erstellt werden? Und was geschieht? Übergibt er keien Werte, wird eine Fehlermeldung geworfen?

Im übrigen hättest du den Code ruhig hier pasten können, in Codetags.

Mfg,
Alex
 
Nein, es soll ein Splashscreen werden, der als Preloader fungiert.
Er soll also Sachen laden und 10 Sekunden warten (das laden selber geht zu schnell).
Danach Soll er das Hauptformular aufrufen und weggehen.
Das Problem ist, dass anscheinend die ganzen Variablen nicht übergeben werden.
Das geschieht aber nur, wenn ich das neue Form in dem TImer Event erzeuge.
Eine Fehlermeldung wird nicht ausgeworfen, er reagiert einfach nicht mehr.
Wenn ich das Programm mit Alt + F4 schließen will bekomme ich diese Dialogbox vonwegen "Das Programm reagiert nicht".

Und den Code habe ich da geparsed, weil ich das gleiche auch noch in diversen IRC-Channels gefragt habe, wo ich allerdings auch nichts rausgefundne habe :(
 
Gut.

1) Warum willst du den Programmstart unbedingt um 10 Sekunden verzögern!? Ich als User würde so etwas hassen!

2) Wenn du mal einen Preload benötigst, weil der Startup wirklich lange dauert, und du den User darüber sozusagen informieren willst solltest du das anders angehen.

Erstelle ein Formular welches den Splashscreen darstellen soll.
Im Konstruktor des eigentlichen Programms erstellst du eine neue Instanz davon und zeigst ihn auch an, dann am Ende des Konstruktors schließt du das Splashscreenfenster. So wird der Splashscreen nur solange angezeigt wie notwendig.
Wenn du aber unbedingt willst, das der Screen dann noch länger angezeigt wird, bzw. nur für eine fixe Zeitlang erstelle den Screen im Konstruktor des Hauptprogramms, und um das beenden kümmerst du dich mit einem Timer im Splashscreen.

Aber, ob es eine so gute Idee ist, den User einen Splashscreen aufzuzwingen?

Wenn du es dennoch so machen willst, wie du bereits angefangen hast. In diesem Code-Snippet geht nicht wirklich hervor wie und wo du die Variablen als was deklarierst.
 
Ich will es so machen, weil das Einlesen von ein par xml Daten und ein par Bildern einfach zu schnell geht.
10 Sekunden sind zwar etwas viel, aber das lässt sich ja noch anpassen :)

Stimmt, die Variablendeklaration ist da nicht mit drin, hier kommt sie:
PHP:
		public Image imgQuestionBackground = Image.FromFile("C:\\pictures\\QuestionBackground.gif");
		public Image imgAnswerBackground = Image.FromFile("C:\\pictures\\AnswerBackground.gif");
		public Image imgGeld = Image.FromFile("C:\\pictures\\Geld.gif");
		public Image imgGeldAktiv = Image.FromFile("C:\\pictures\\GeldAktiv.gif");
		public Image imgSpielen = Image.FromFile("C:\\pictures\\Spielen.gif");
		public Image imgHighscore = Image.FromFile("C:\\pictures\\Highscore.gif");
		public Image imgCredits = Image.FromFile("C:\\pictures\\Credits.gif");
		public Image imgBeenden = Image.FromFile("C:\\pictures\\Beenden.gif");
		public Image imgLogo = Image.FromFile("C:\\pictures\\Logo.gif");

		public ArrayList arQuestion = new ArrayList();
		public ArrayList arAnswerA = new ArrayList();
		public ArrayList arAnswerB = new ArrayList();
		public ArrayList arAnswerC = new ArrayList();
		public ArrayList arAnswerD = new ArrayList();
		public ArrayList arAnswerRight = new ArrayList();
		public ArrayList arGeld1 = new ArrayList();
		public ArrayList arGeld2 = new ArrayList();
		public ArrayList arGeld3 = new ArrayList();
		public ArrayList arGeld4 = new ArrayList();
		public ArrayList arGeld5 = new ArrayList();
		public ArrayList arGeld6 = new ArrayList();
		public ArrayList arGeld7 = new ArrayList();
		public ArrayList arGeld8 = new ArrayList();
		public ArrayList arGeld9 = new ArrayList();
		public ArrayList arGeld10 = new ArrayList();
		public ArrayList arGeld11 = new ArrayList();
		public ArrayList arGeld12 = new ArrayList();
		public ArrayList arGeld13 = new ArrayList();
		public ArrayList arGeld14 = new ArrayList();
		public ArrayList arGeld15 = new ArrayList();
		public int MaxID = 0;
 
Original geschrieben von wertzui
Ich will es so machen, weil das Einlesen von ein par xml Daten und ein par Bildern einfach zu schnell geht.
Was genau spricht gegen ein schnelles Programm?
"Bitte warten Sie, während dieses Programm Sie 10 Sekunden warten lässt, um professioneller zu wirken."

Ich habe bei einem meiner Programme auch einen Splashscreen. Der wird in einer Main-Methode angezeigt, bevor das Hauptformular in die Nachrichten-schleife geschickt wird. Auf dem Splashscreen ist eine Progressbar, die den Benutzer über den Fortschritt des Startvorgangs informiert.

Bei mir dauert das, je nachdem, ob das Framework nach Systemstart schon mal benutzt wurde, 4-9 Sekunden.
 
Es soll einfach angezeigt werden, ein par Sekunden werden schon nicht alzu doll stören.
Außerdem sollen ein paar Informationen, wie Versionsnummer usw angezeigt werden.

Achso, könnten wir vielleicht zum eigentlichen Problem zurückkommen? ;)
 
Ich habe es nun in den Konstructor gepackt.
Allerdings bekomme ich bei
PHP:
case "Frage":
	arQuestion.Add(reader.ReadElementString()); //In Dieser Zeile kommt die Fehlermeldung
	break;
immer folgende Fehlermeldung:

An unhandled exception of type 'System.NullReferenceException' occurred in Quiz.exe

Additional information: Object reference not set to an instance of an object.

Hier der gesammte Code, wie er im Moment aussieht:
http://wilcoding.xs4all.nl/Wilco/Pastecode.aspx?pasteID=821


[edit]
Habe es schon gelöst, lag daran, dass ich beim Code kopieren vergessen hate, neue Arraylisten zu erzeugen.
[edit]
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück