«Отправлять действие», которое вы имеете в виду, вызывая Dispatcher.BeginInvoke () или какой-либо другой вид асинхронной операции?
В любом случае, в обоих случаях вы можете получить «дескриптор» операции (DispatcherOperation или IAsyncResult) и сохранить его в виде поля при отправке операции. Когда он завершится - установите для этого поля значение null.
В обработчике события click пункта меню отметьте это поле. Если он нулевой, это означает, что можно безопасно начинать операцию. Если он не нулевой - немедленно вернитесь и ничего не делайте.
И что-то не связанное с вашим вопросом, но важное - почему бы не использовать команды? Таким образом, вам не нужно играть с обработкой событий и включением / отключением. И, конечно, команды могут вызываться несколькими способами (например, пользователь выбрал команду из меню, используя клавиатуру, и нажал Enter. Никаких щелчков мышью не требуется, но он должен делать то же самое, что и пункт меню).
Alex.