Мне было проще всего, чтобы обработчик событий элемента меню порождал фоновый поток, который отключает элемент меню, выполняет работу, а затем снова включает элемент меню. Таким образом, пользовательский интерфейс доступен для обработки других запросов пользовательского интерфейса, и мне не нужно запрашивать информацию о завершении операции.
Я обычно включаю логику, которая предотвращает одновременное выполнение нескольких операций, использующих одни и те же ресурсы. Это означает создание функции для одновременного отключения / включения всех похожих ресурсов. например Я мог бы разрешить выполнять только одну файловую операцию за раз, поэтому я бы создал функцию для отключения / включения всех пунктов меню, связанных с файловыми операциями, и вызывал ее из каждого из этих пунктов меню.