Поместите все это в фоновый поток (возможно, с BackgroundWorker
, возможно, с Task
в .NET 4) и используйте Control.Invoke
или Control.BeginInvoke
, чтобы маршалировать обратно в поток пользовательского интерфейса, когда вы хотите обновитьПользовательский интерфейс.
Вы не сможете просто позвонить GetFiles
и использовать результат в пользовательском интерфейсе - по крайней мере, до C # 5, что упростит все это с помощью async / await - но вы можетезаставить фоновый поток "сообщать" потоку пользовательского интерфейса, когда он завершен, а также когда он находит каждый отдельный файл.По сути, оставьте блок итератора и либо сохраните count
как состояние внутри класса, либо заставьте фоновый поток сообщать об общем количестве, когда он обратится к потоку пользовательского интерфейса после его завершения.