Я бы предложил что-то близкое к варианту 1. У меня был бы метод, который принимает корневой каталог в качестве входных данных и возвращает список каталогов, которые являются «плохими». Также я бы вызвал этот метод в фоновом потоке, чтобы не повесить пользовательский интерфейс во время выполнения операции. Добавьте индикатор выполнения или какой-нибудь индикатор ожидания, чтобы пользователь знал, что операция продолжается.
Передача текстового поля в метод не позволит вам повторно использовать этот метод для чего-либо еще. В интересах повторного использования кода (если это важно для вас), я думаю, что было бы проще, если бы метод возвращал список и позволял методу обратного вызова выяснить, как отображать данные.