Шаблоны MVC и Command должны работать здесь. Основная идея заключается в том, что вам нужно отправить «сообщение» (которое может быть объектом, строкой или чем-то еще) в GUI, чтобы уведомить его об изменении его состояния и как. Вам просто нужно быть осторожным, чтобы принять во внимание любые задержки, которые могут возникнуть из-за получения и обработки сообщения с помощью графического интерфейса.
Вы можете создать очередь событий (связанных с командами) и убедиться, что первая входящая - первая выходная (следовательно, очередь). Затем обработайте GUI следующее событие в очереди, это обеспечит обновление GUI перед тем, как вы запустите другое событие, чтобы выполнить то, что вы только что попытались отключить. Затем вы можете сообщить об ошибке или игнорировать ее или что-то еще. В любом случае, пользователь не сможет что-то сделать после получения команды на отключение этой функции. Отключение кнопки GUI - это просто визуальный эффект, и должен быть код предупреждения для команд в фоновом режиме, которые действительно выполняют эту работу за вас.