Autor Beitrag
Trautmann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 24.03.09 23:48 
Hiho,

ich würd gern wissen wie ich ein DateTime-Objekt zum Zählen bringe. Wenn ich es normal definiere alá
ausblenden 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 24.03.09 23:49 
Die aktuelle Zeit bekommst mit DateTime.Now, falls Du das meinst :gruebel:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Trautmann Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 24.03.09 23:54 
Hallo,

ich suche ein Objekt erstellen das die Zeit von seinem Entstehungszeitpunkt an zählt.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 25.03.09 00:53 
Ein vorgefertigtes Objekt kenne ich nicht. Aber Du kannst die vergangene Zeit so bestimmen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
DateTime start = DateTime.Now;

/* ... Kaffee trinken gehen ... */

TimeSpan vergangen = DateTime.Now - start;


Wenn Du das mit nem Timer kombinierst, kannst Du auch "zählen".

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 25.03.09 09:41 
user profile iconTrautmann hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: 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?

ausblenden 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: 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