Я бы хотел приостановить обновление файла (может занять несколько секунд), используя цикл Thread.Sleep, который каждую секунду проверяет изменение метки времени.Однако приложение полностью зависает во время цикла сна и даже не может обновить отображение.
Я посмотрел следующий (упрощенный) код, который не останавливает программу.Но программа достигает конца (печатает «Готово») до завершения функции «Рабочий» - дождитесь завершения функции (напечатайте «Конец», прежде чем «Готово»).Сняв отметку с последней строки, чтобы дождаться окончания функции, приложение замораживается.
Есть ли лучший способ дождаться изменения файла, не замораживая приложение?Если нет, то как дождаться завершения длинной функции, не останавливая приложение И не дождавшись завершения функции, прежде чем начинать с основным кодом?
private static ManualResetEvent resetEvent = new ManualResetEvent(false);
private void Worker(object ignored)
{
Print("start");
Thread.Sleep(5000);
Print("end")
resetEvent.Set();
}
Main:
ThreadPool.QueueUserWorkItem(new WaitCallback(Worker));
Print("Done");
//resetEvent.WaitOne();
вывод с последней строкой, отмеченной:
- Готово
- начало
- конец
вывод с последней строкой без отметки: (приложение останавливается, затем): 1. Начало 2. Конец 3.Готово
ожидается, без заморозки:
- начало
- конец
- Готово