Существует файл журнала (простой текстовый файл), который обновляется сервером по мере его запуска.
Как мне постоянно проверять файл журнала и выводить его содержимое в RichTextBox?
Я выполнил эту простую функцию, просто попытавшись получить содержимое журнала. Конечно, он просто получит текст построчно и выведет его в мое текстовое поле. Кроме того, программа будет заблокирована на время выполнения цикла, поэтому я знаю, что это бесполезно.
Код: Выделить всё
public void ReadLog()
{
using (StreamReader reader = new StreamReader("server.log"))
{
String line;
// Read and display lines from the file until the end of the file is reached.
while ((line = reader.ReadLine()) != null)
{
monitorTextBox.AppendText(line + "\n");
CursorDown();
}
}
}
*** РЕДАКТИРОВАТЬ ***
Я использую решение Prescots. отличная штука.
Сейчас я использую sstreamreader для помещения текста из файла в текстовое поле. Я столкнулся с проблемой: всякий раз, когда я пытался получить доступ к любому из элементов управления графическим интерфейсом в моем обработчике событий, программа просто останавливалась без ошибок или предупреждений.
Я обнаружил, что это необходимо сделать с резьбой. Я решил это так:
Код: Выделить всё
private void OnChanged(object source, FileSystemEventArgs e)
{
if (monitorTextField.InvokeRequired)
{
monitorTextField.Invoke((MethodInvoker)delegate { OnChanged(source, e); });
}
else
{
StreamReader reader = new StreamReader("file.txt");
monitorTextField.Text = "";
monitorTextField.Text = reader.ReadToEnd();
reader.Close();
CursorDown();
}
}
Но файл можно открыть в блокноте во время работы сервера, так что каким-то образом это должно быть возможно. Возможно, я смогу сделать временную копию файла, когда он обновится, и прочитать копию. Я не знаю.
Подробнее здесь: https://stackoverflow.com/questions/975 ... -a-textbox