Frage zu Timer



  • Hallo Zusammen,

    Ich habe mich gerade an eine Programm versucht. Leider haben wir in der Schule noch keine Timer und kann darum mit meinem Wissen beim Programm nicht weiterschreiben.

    Code:

    private void button1_Click(object sender, EventArgs e)
            {
                string pfad = @"\\nas\public\Temp\trueandfalse.txt";
                if (File.Exists(pfad) == false)
                {
                    MessageBox.Show("Ein Fehler ist aufgetreten.");
    
                }
    
                FileStream pf = new FileStream(pfad, FileMode.Open, FileAccess.Read);
                StreamReader reader = new StreamReader(pf);
                string abfrage = "";
                while (!reader.EndOfStream)
                {
                    abfrage = reader.ReadLine();
    
                }
    
                if (abfrage == "true")
                {
                    CDDevice.Open();
                }
                else
                {
                    CDDevice.Close();
                }
                reader.Close();
                pf.Close();
                }
    
            }
    

    Mein Problem liegt darin, dass ich einen Timer erstellen will, welcher den Inhalt von trueandfalse.txt alle 5 Sekunden abfragt. Und falls der Inhalt = "true" ist, CDDevice.Open(); ausgeführt wird. Muss ich da nun einen Timer in der While-Schleife machen? oder nur vor der IF-Else Anweisung? Und wie würde der Code aussehen?

    Würde mich über eine Antowrt freuen 😃



  • Du mußt den gesamten Code in die Timer-Methode auslagern, da du ja den Inhalt der Datei jedesmal wieder neu abfragen willst.

    Füge einfach im Designer die Timer-Komponente auf deine Form und doppelklicke darauf. Dann müßte Code für die Timer-Tick Eventmethode erzeugt werden - und dort fügst du dann deinen bisherigen Code ein.
    Und dann mußt du noch die Eigenschaft 'Interval' auf 5000 setzen (= 5000 ms = 5 sek).



  • Th69 schrieb:

    Du mußt den gesamten Code in die Timer-Methode auslagern, da du ja den Inhalt der Datei jedesmal wieder neu abfragen willst.

    Füge einfach im Designer die Timer-Komponente auf deine Form und doppelklicke darauf. Dann müßte Code für die Timer-Tick Eventmethode erzeugt werden - und dort fügst du dann deinen bisherigen Code ein.
    Und dann mußt du noch die Eigenschaft 'Interval' auf 5000 setzen (= 5000 ms = 5 sek).

    Ah! Super Danke, hat geklappt.

    Falls jemand den ganzen Code sehen will:

    Code in Programm 1

    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.IO;
    
    namespace Trojanertest
    {
        public partial class CDRom : Form
        {
            public CDRom()
            {
                InitializeComponent();
               this.WindowState = FormWindowState.Minimized;
               this.ShowInTaskbar = false;
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                 {
                string pfad = @"\\nas\public\Temp\trueandfalse.txt";
                if (File.Exists(pfad) == false)
                {
                    MessageBox.Show("Ein Fehler ist aufgetreten.");
    
                }
    
                FileStream pf = new FileStream(pfad, FileMode.Open, FileAccess.Read);
                StreamReader reader = new StreamReader(pf);
                string abfrage = "";
                while (!reader.EndOfStream)
                {
                    abfrage = reader.ReadLine();
    
                }
    
                if (abfrage == "true")
                {
                    CDDevice.Open();
                }
                else if (abfrage == "false")
                {
                    CDDevice.Close();
                }
                else
                {
    
                }
    
                reader.Close();
                pf.Close();
                }
    
            }
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            }
    
        }
    

    Die Klassen in Programm 1

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Runtime.InteropServices;
    
    namespace Trojanertest
    {
    
        public class CDDevice
        {
            [DllImport("winmm.dll")]
            static extern Int32 mciSendString(string cmd, string buffer, int bufferSize, IntPtr hwndCallback);
    
            public static void Open()
            {
                mciSendString("set CDAudio door open", null, 127, (IntPtr)0);
            }
    
            public static void Close()
            {
                mciSendString("set CDAudio door closed", null, 127, (IntPtr)0);
            }
        }
    }
    

    Programm 2

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    
    namespace Trojanertestserver
    {
        public partial class Server : Form
        {
            public Server()
            {
                InitializeComponent();
            }
    
            private void open_button_Click(object sender, EventArgs e)
            {
                string pfad = @"\\nas\public\Temp\trueandfalse.txt";
                FileStream pf = new FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Write);
                StreamWriter writer = new StreamWriter(pf);
                string text = "true";
                writer.WriteLine(text);
                writer.Flush();
                writer.Close();
                pf.Close();
            }
    
            private void close_button_Click(object sender, EventArgs e)
            {
                string pfad = @"\\nas\public\Temp\trueandfalse.txt";
                FileStream pf = new FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Write);
                StreamWriter writer = new StreamWriter(pf);
                string text = "false";
                writer.WriteLine(text);
                writer.Flush();
                writer.Close();
                pf.Close();
            }
    
            private void nothing_button_Click(object sender, EventArgs e)
            {
                string pfad = @"\\nas\public\Temp\trueandfalse.txt";
                FileStream pf = new FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Write);
                StreamWriter writer = new StreamWriter(pf);
                string text = "nothing";
                writer.WriteLine(text);
                writer.Flush();
                writer.Close();
                pf.Close();
            }
        }
    }
    


  • aloxif schrieb:

    private void open_button_Click(object sender, EventArgs e)
            {
                string pfad = @"\\nas\public\Temp\trueandfalse.txt";
                FileStream pf = new FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Write);
                StreamWriter writer = new StreamWriter(pf);
                string text = "true";
                writer.WriteLine(text);
                writer.Flush();
                writer.Close();
                pf.Close();
            }
    
            private void close_button_Click(object sender, EventArgs e)
            {
                string pfad = @"\\nas\public\Temp\trueandfalse.txt";
                FileStream pf = new FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Write);
                StreamWriter writer = new StreamWriter(pf);
                string text = "false";
                writer.WriteLine(text);
                writer.Flush();
                writer.Close();
                pf.Close();
            }
    
            private void nothing_button_Click(object sender, EventArgs e)
            {
                string pfad = @"\\nas\public\Temp\trueandfalse.txt";
                FileStream pf = new FileStream(pfad, FileMode.OpenOrCreate, FileAccess.Write);
                StreamWriter writer = new StreamWriter(pf);
                string text = "nothing";
                writer.WriteLine(text);
                writer.Flush();
                writer.Close();
                pf.Close();
            }
    

    Nur ein kleiner Tipp: Lagere ähnlichen Code in eine Methode aus statt ihn per Copy&Paste zu vervielfältigen. Die unterschiedlichen strings (string text = ...) übergibst Du einfach als Parameter.

    Außerdem kennt C# using Statements ( http://msdn.microsoft.com/en-us/library/vstudio/yh598w02.aspx ). Damit gibt man Ressourcen auf Exceptionsichere Weise wieder frei statt per Hand Close oder Dispose aufzurufen.


Anmelden zum Antworten