Ни при каких обстоятельствах вы не должны делать ничего из этого. Свойство всегда должно быть fast и логически представлять свойство чего-либо. В идеале это никогда не должно подвести. Это, конечно, не должно вызывать побочных эффектов, таких как появление пользовательского интерфейса. Вы нарушаете все эти важные правила. Не делай этого.
Кроме того, ваш дизайн интерфейса плохой. Не спрашивайте пользователя заранее "это может занять некоторое время, вы уверены?" а затем накажи их долгим ожиданием, если они нажмут "да". Вместо этого запустите операцию и, если она не вернется быстро, откройте элемент пользовательского интерфейса, который показывает индикатор выполнения и приблизительное оставшееся время с кнопкой отмены.
Вероятно, вы должны написать свою длительную операцию как асинхронный метод, который можно полностью отменить в другом потоке.
Хорошая архитектура для такого рода вещей состоит в том, чтобы ваш метод немедленно возвращал объект, который выставляет события типа «Я все еще бегу, и вот как далеко я впереди», или «Я закончил сейчас, и вот результат "или" Я получил ошибку при попытке выполнить операцию, и вот что это такое ". Этот объект также может предоставлять метод «отмена», который знает, как взаимодействовать с рабочим потоком и правильно его закрывать. Вызывающий метод, который получает этот объект, может затем решить, как отобразить пользовательский интерфейс для пользователя.
С помощью этой архитектуры вы четко отделяете логику пользовательского интерфейса, логику асинхронности и логику бизнес-процессов друг от друга. Это работа, но она приносит дивиденды позже.