Entwickler-Ecke
Basistechnologien - methode/funktion ohne objekte
qwertz123 - Mi 12.11.08 12:38
Titel: methode/funktion ohne objekte
Hallo,
möchte in ganz simples Programm entwerfen, das einfach nur alle 5 Sek. eine Zahl ausgibt. Hierbei soll jedes mal in eine Timer-Funktionen reingesprungen werden, die quasi die 5 Sek. Pause errechnet.
Der Sinn des Programms sei mal dahingestellt.
Gibt es eine Möglichkeit, das ganze ohne objektorientierte Programmierung zu machen?
Hier unten mal mein Programmcode, allerdings funktioniert das so nicht.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76:
| using System; using System.Collections.Generic; using System.Text; using System.Timers;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DateTime starttime; DateTime stoptime; TimeSpan datetime_diff = new TimeSpan(); TimeSpan ref_time = new TimeSpan (0,0,0,5);
for (int number = 1; number < 5; number++) { Console.WriteLine(); Console.WriteLine(); Console.WriteLine();
switch (number) { case 1: Console.WriteLine(" "); Console.WriteLine(" |"); Console.WriteLine(" |"); timerfct(); break; case 2: Console.WriteLine(" __ "); Console.WriteLine(" __|"); Console.WriteLine("|__"); timerfct(); break; case 3: Console.WriteLine(" __ "); Console.WriteLine(" __|"); Console.WriteLine(" __|"); timerfct(); break; case 4: Console.WriteLine("|__|"); Console.WriteLine(" |"); timerfct(); break;
default: Console.WriteLine("Fehler"); break; }
public void timerfct() { starttime = DateTime.Now; stoptime = DateTime.Now; while (datetime_diff< ref_time) { datetime_diff=stoptime.Subtract(starttime); stoptime = DateTime.Now; } }
}
Console.ReadLine();
} } } |
JüTho - Mi 12.11.08 12:54
Hallo,
NET geht nicht ohne OOP. Es geht also auch nicht ohne (passende) Klassen.
Dein Vorgehen mit Timer ist falsch herum aufgezogen: Ein Timer ist ein Objekt (!), das vom Betriebssystem aus regelmäßig angesteuert wird und in seinem Event (Tick beim Forms-Timer, Elapsed bei System.Timers) etwas erledigt.
Bitte schau das Beispiel in der SDK-Doku/MSDN unter Timer-Klasse (System.Timers - nicht die beiden anderen!) an; das entspricht Deinem Ziel.
Jürgen
Nachtrag: Der Titel: "methode/funktion ohne objekte" kann formal so beantwortet werden: Eine statische Methode kann ausgeführt, ohne dass eine Instanz eines Objektes erzeugt wird. Beispiele sind die File- und die Directory-Klasse oder Int32.TryParse. Das beschriebene Problem hat mit diesem Titel eigentlich wenig zu tun; allerdings erschließt sich das nur indirekt, wenn man mit Klassen und static usw. Bescheid weiß.
qwertz123 - Mi 12.11.08 16:26
Danke zunächst. Hier der Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| using System; using System.Timers;
public class Timer1 { public static void Main() { System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 2000; aTimer.Enabled = true; Console.WriteLine("Press the Enter key to exit the program."); Console.ReadLine();
GC.KeepAlive(aTimer); } private static void OnTimedEvent(object source, ElapsedEventArgs e) { Console.WriteLine("Hello World!"); } } |
Das is zwar nicht ganz leicht zu verstehen mit dem ElapsedEventHandler.
Es stellt sich noch die Frage, wie man jetzt nur z.B. einen Durchgang des Timers realisiert, nicht, dass er ständig läuft
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!