Entwickler-Ecke
Basistechnologien - DateTime-Objekt zum Zählen bringen.
Trautmann - Di 24.03.09 23:48
Titel: DateTime-Objekt zum Zählen bringen.
Hiho,
ich würd gern wissen wie ich ein DateTime-Objekt zum Zählen bringe. Wenn ich es normal definiere alá
C#-Quelltext
1:
| Datetime d1 = new Datetime(); |
bekomme ich zwar ein "leeres" Zeitobjekt aber die Zeit darin vergeht nicht- es sind immer 0 Sekunden.
Ich hab das ganze schon mal durch Zufall hinbekommen und bin jetzt ganz verzweifelt weil ichs nicht mehr rekonstruieren kann. :(
Habe 3.5er Framework.
danke schon jetzt,
Trautmann
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Christian S. - Di 24.03.09 23:49
Die aktuelle Zeit bekommst mit DateTime.Now, falls Du das meinst :gruebel:
Trautmann - Di 24.03.09 23:54
Hallo,
ich suche ein Objekt erstellen das die Zeit von seinem Entstehungszeitpunkt an zählt.
Christian S. - Mi 25.03.09 00:53
Ein vorgefertigtes Objekt kenne ich nicht. Aber Du kannst die vergangene Zeit so bestimmen:
C#-Quelltext
1: 2: 3: 4: 5:
| DateTime start = DateTime.Now;
TimeSpan vergangen = DateTime.Now - start; |
Wenn Du das mit nem Timer kombinierst, kannst Du auch "zählen".
Kha - Mi 25.03.09 09:41
Trautmann hat folgendes geschrieben : |
| Ich hab das ganze schon mal durch Zufall hinbekommen und bin jetzt ganz verzweifelt weil ichs nicht mehr rekonstruieren kann. :( |
War das vielleicht die Stopwatch-Klasse (.StartNew)?
Trautmann - Mi 25.03.09 18:31
Hiho,
ich hab Christians-Methode mal probiert und ich denke die wars, danke.
Leider hab ich jetzt das Problem das der Timer-Eventhandler nicht ausgeführt wird. Was mach ich falsch?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| private void button1_Click(object sender, EventArgs e) { BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += new DoWorkEventHandler(kill); bw.RunWorkerAsync(); } public void kill(object sender, DoWorkEventArgs e) { System.Windows.Forms.Timer t1 = new System.Windows.Forms.Timer(); t1.Interval = 1000; t1.Tick += new EventHandler(zeig); t1.Enabled = true; } private void zeig(object sender, System.EventArgs e) { MessageBox.Show("test"); } |
Edit: Aso alles klar Timer startet schon einen eigenen Thread.
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Ralf Jansen - Mi 25.03.09 19:11
Der von dir benuzte Timer benutzt keine Threads. Dazu müßtest du System.Threading.Timer verwenden.
Threads sind in diesem Fall aber auch unnötig also auch der Backgroundworker.
Der Tick Event des Timer wird vermutlich nicht gefeuert weil du eine lokale Variable für den Timer benutzt.
Bevor der Event auch nur einemal aufgerufen werden kann ist die kill Methode schon zu Ende gelaufen der Timer damit nicht mehr referenziert und wird vom GC zerstört. Du solltest aus dem Timer also eine Instanzvariable machen.
Flitzs - Mi 25.03.09 23:21
Hallo,
der System.Windows.Forms.Timer verwendet die Nachrichten-Queue des Threads in dem das GUI läuft, und ist daher für dein Beispiel nicht geeignet. Somit musst du wohl System.Timers.Timer verwenden, oder den System.Windows.Forms.Timer im GUI Thread starten (was ja kein Problem sein sollte, da er ja nicht blockiert).
mfg Flitzs
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!