Как обновить текст из текстового файла по таймеру

avatar
ARatChicken
9 августа 2021 в 06:44
148
1
0

Мне нужно знать, как обновлять текст по таймеру Я не хочу, чтобы он определял, когда происходит изменение
Я также хотел бы иметь возможность писать на него.

Мой код:

Console.Clear();
string filepath = @"StrWorkPath\Chat.log";

List<string> lines = File.ReadAllLines(filepath).ToList();
foreach (string line in lines)
{
    Console.WriteLine(line);
}
Console.Write("");
string chat;
chat = Console.ReadLine();
lines.Add(chat);
File.WriteAllLines(filepath, lines);

Кроме того, я новичок в C#, так что не злитесь на мой ужасный код.

Источник
Mohammed Noureldin
9 августа 2021 в 07:34
0

Итак, вы хотите иметь возможность вводить текст в консоль, пока какой-то текст выводится на экран?

Ответы (1)

avatar
Tsahi Asher
9 августа 2021 в 07:16
-1

В .NET есть два таймера общего назначения:

System.Threading.Timer

Этот класс позволяет непрерывно вызывать делегата через определенные промежутки времени. Вы также можете использовать этот класс для планирования одного вызова делегата в указанный интервал времени. Делегат выполняется в потоке ThreadPool.

Пример:

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    private static Timer timer;

    static void Main(string[] args)
    {
        timer = new Timer(
            callback: new TimerCallback(TimerTask),
            state: /* your state object here */,
            dueTime: 1000,
            period: 2000);

        Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: done.");
    }

    private static void TimerTask(object timerState)
    {
        Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}: starting a new callback.");
        //you can cast timerState to it's concrete type here
    }
}

System.Timers.Timer

Еще один таймер, который можно использовать в многопоточной среде, — это System.Timers.Timer, который по умолчанию вызывает событие в потоке ThreadPool.

При создании объекта System.Timers.Timer можно указать временной интервал, в течение которого должно вызываться событие Elapsed. Используйте свойство Enabled, чтобы указать, должен ли таймер вызывать событие Elapsed. Если вам нужно, чтобы событие Elapsed возникало только один раз по истечении указанного интервала, установите для параметра AutoReset значение false. Значение по умолчанию для свойства AutoReset равно true, что означает, что событие Elapsed возникает регулярно с интервалом, заданным свойством Interval.

Вы можете начать читать отсюда: https://docs.microsoft.com/en-us/dotnet/standard/threading/timers

Mohammed Noureldin
9 августа 2021 в 07:28
0

Пожалуйста, предоставьте конкретное решение или объяснение, предоставление ответа только по ссылкам - это плохо, особенно если ссылка не работает в будущем.

Mohammed Noureldin
9 августа 2021 в 14:20
0

@TsahiAsher, добавление резюме или цитат из ссылки намного лучше, как и вы. Между прочим, я не голосую против :), я не люблю голосовать против, я ценю любые попытки помочь. Однако ваш код не будет работать так, как описал спрашивающий? Потому что он не сможет ввести новый текст.

Tsahi Asher
9 августа 2021 в 15:18
0

@MohammedNoureldin, что ты имеешь в виду? его код должен перейти к обратному вызову TimerTask.