Ich habe einen Windows-Dienst, der sein Protokoll in eine Textdatei in einem einfachen Format schreibt.
Jetzt werde ich eine kleine Anwendung erstellen, um das Protokoll des Dienstes zu lesen und sowohl das vorhandene als auch das hinzugefügte Protokoll als Live-Ansicht anzuzeigen.
Das Problem ist, dass der Dienst die Textdatei zum Hinzufügen der neuen Zeilen sperrt und gleichzeitig die Viewer-Anwendung die Datei zum Lesen sperrt.
Der Service Code:
void WriteInLog(string logFilePath, data)
{
File.AppendAllText(logFilePath,
string.Format("{0} : {1}\r\n", DateTime.Now, data));
}
Der Viewer-Code:
int index = 0;
private void Form1_Load(object sender, EventArgs e)
{
try
{
using (StreamReader sr = new StreamReader(logFilePath))
{
while (sr.Peek() >= 0) // reading the old data
{
AddLineToGrid(sr.ReadLine());
index++;
}
sr.Close();
}
timer1.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
using (StreamReader sr = new StreamReader(logFilePath))
{
// skipping the old data, it has read in the Form1_Load event handler
for (int i = 0; i < index ; i++)
sr.ReadLine();
while (sr.Peek() >= 0) // reading the live data if exists
{
string str = sr.ReadLine();
if (str != null)
{
AddLineToGrid(str);
index++;
}
}
sr.Close();
}
}
Gibt es ein Problem in meinem Code beim Lesen und Schreiben?
Wie löse ich das Problem?