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.