Итак, меня что-то беспокоило в связи с новой поддержкой асинхронности в C # 5:
Пользователь нажимает кнопку, которая запускает асинхронную операцию. Вызов немедленно возвращается, и насос сообщений снова начинает работать - вот и весь смысл.
Таким образом, пользователь может снова нажать кнопку - вызывая повторный вход. Что если это проблема?
В демонстрациях, которые я видел, они отключают кнопку перед await
вызовом и включают ее снова после. Это кажется мне очень хрупким решением в реальном приложении.
Должны ли мы кодировать какой-то конечный автомат, который указывает, какие элементы управления должны быть отключены для данного набора запущенных операций? Или есть лучший способ?
Я испытываю желание просто показать модальное диалоговое окно на время операции, но это похоже на использование кувалды.
У кого-нибудь есть какие-нибудь яркие идеи, пожалуйста?
РЕДАКТИРОВАТЬ:
Я думаю, что отключение элементов управления, которые не должны использоваться во время выполнения операции, является хрупким, потому что я думаю, что это быстро станет сложным, когда у вас будет окно с множеством элементов управления. Мне нравится быть проще, потому что это уменьшает вероятность ошибок, как во время первоначального кодирования, так и при последующем обслуживании.
Что если существует набор элементов управления, которые следует отключить для определенной операции? А что, если несколько операций выполняются одновременно?