Laden...

[gelöst] Timer in Service wird nicht ausgeführt

Erstellt von Crone vor 10 Jahren Letzter Beitrag vor 10 Jahren 721 Views
Thema geschlossen
C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 10 Jahren
[gelöst] Timer in Service wird nicht ausgeführt

Guten Abend,

Ich hoffe ihr könnte mir weiterhelfen nachdem ich schon seit Stunden teste und kein schritt weiter komme 😦

Also ich hab ein Service geschrieben dieser soll jede Sekunde ein Variable hochzählen ...Einfach oder?

Naja komischerweise irgendwie doch nicht den der Timer wird nicht ausgeführt zu mindestens wird kein log-eintrag geschrieben

Hier der Code:

        private const string username = "User";

        public Service1()
        {
            InitializeComponent();
            this.ServiceName = "ComputerTimer";
        }
        private const string path = "C:/Temp/log.srv";
        private StreamWriter sw;
        protected override void OnStart(string[] args)
        {
            try
            {
                if (File.Exists(path))
                {
                    File.Delete(path);

                }
                File.Create(path).Close();

                sw = File.AppendText(path);
                sw.WriteLine("Username: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name + " ; " + Environment.UserName);
                sw.Flush();
                if (Properties.Settings1.Default.Datum == "nichts")
                {
                    Properties.Settings1.Default.Datum = DateTime.Today.ToShortDateString();
                    Properties.Settings1.Default.Sekunden = 0;
                    Properties.Settings1.Default.Save();
                    sw.WriteLine("DATUM UNBEKANNT");
                    sw.Flush();
                }
                else if (Properties.Settings1.Default.Datum == DateTime.Today.ToShortDateString())
                {
                    sw.WriteLine("Seconds: " + Properties.Settings1.Default.Sekunden.ToString());
                    sw.Flush();
                }
                else
                {
                    Properties.Settings1.Default.Datum = DateTime.Today.ToShortDateString();
                    Properties.Settings1.Default.Sekunden = 0;
                    Properties.Settings1.Default.Save();
                }
                sw.WriteLine("PreTimer");
                sw.Flush();
                timer1.Enabled = true;
                timer1.Start();
                sw.WriteLine("PostTimer");
                sw.Flush();
            }
            catch (Exception ex)
            {
                MessageBox.Show("OnStart: " + ex.ToString());
                sw.WriteLine("OnStart: " + ex.ToString());
                sw.Flush();
            }

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                if (System.Security.Principal.WindowsIdentity.GetCurrent().Name.Contains(username) || Environment.UserName.Contains(username))
                {
                    Properties.Settings1.Default.Sekunden += 1;
                    Properties.Settings1.Default.Save();

                    sw.WriteLine(Properties.Settings1.Default.Sekunden);
                    sw.Flush();
                    
                }
                else
                {
                    sw.WriteLine("FALSE: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name);
                    sw.Flush();
                }
            }
            catch (Exception ex)
            {
                sw.WriteLine("OnTick: " + ex.ToString());
                sw.Flush();
                MessageBox.Show("OnTick: " + ex.ToString());
            }
        }

Egal wo Log-Eintraäge werden immer geschrieben außer im Timer ... so als wenn dieser nie ausgeführt wird.

Auch die Sekunden in meiner Settings-Datei bleiben immer 0.

Ich stehe jedenfalls auf'en Schlauch.... als Windows-Form-Anwendung funktioniert es super.

Mit freundlichen Grüßen
Crone

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

190 Beiträge seit 2012
vor 10 Jahren
  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

C
Crone Themenstarter:in
168 Beiträge seit 2010
vor 10 Jahren

Danke!

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

Hinweis von herbivore vor 10 Jahren

... nachdem ich schon seit Stunden teste und kein schritt weiter komme ...

Normalerweise sollte man schon nach Minuten, nach denen man nicht weiter kommt, mal in die Doku gucken. Dort steht als zweiter Satz in Timer-Klasse:

Dieser Zeitgeber ist für die Verwendung in Windows Forms-Anwendungen optimiert und muss in einem Fenster verwendet werden.

Weiter unten steht dann nochmal genauer, was "muss in einem Fenster verwendet werden" bedeutet:

Hierfür muss im Benutzercode eine Nachrichtenverteilschleife für die Benutzeroberfläche verfügbar sein.

Bitte beachte daher [Hinweis] Wie poste ich richtig? Punkt 1.1.

Siehe auch aufruf alle 10 sekunden [Außerdem: Wahl der richtigen Timer-Klasse]

Thema geschlossen