Дополнительное примечание к тому, что написал Итай:
Вы звоните Thread.Sleep
из потока GUI!Почему вам даже нужно сделать задержку после закрытия файла?Если вам нужна эта задержка по какой-либо причине (например, чтобы не читать файл слишком часто), не помещайте эту задержку в поток GUI, потому что это сделает ваше приложение не отвечающим.отвечая на ваш вопрос в комментарии
Возможным более чистым способом будет установка Timer
, который будет вызывать BackgroundWorker
каждые x секунд.
BackgroundWorker
делаеточень легко запускать код в фоновом потоке и выполнять обратный вызов в потоке GUI, когда работа завершена.И вам не нужно иметь дело с Invoke
и InvokeRequired
напрямую.
Более того, я бы создал класс, который заключает в себе BackgroundWorker
, чтобы было легче передавать данные из операции чтенияфайл (в фоновом потоке), для обновления пользовательского интерфейса (в потоке GUI).