@SergeySerge11

Как запретить несколько нажатий Button? WPF?

Есть кнопка, по нажатию, происходит долгая операция, в конце которой затрагивается отрисовка элемента image/
У элемента image.Source = new DrawingImage(dGroup); dGroup содержит drawingVisual элементы, которые удаляются добавляются, в процессе функции нажатия.
Проблема, если я нажимаю, 10 раз то она 10 раз будет выполнять расчеты. И вообще не понимаю, как их остановить,
По откладке, все события нажатий ложатся в очередь, и выполняются друг за другом, но Анимация, работает, как я понимаю в другом потоке. Как запретить обработку пока идет перерисовка image?

Вот такая штука не работает.

private void solveClick(object sender, EventArgs e)
        {
             
                if (!((Button)sender).IsEnabled) // пробoвал  по таймеру,  не помoгает, все вызовы 
                    return;
                else
                {
                    ((Button)sender).IsEnabled = false;
                
                     var selectedTabItem =(TabItemInterface) (this.TabsFunc.SelectedItem);
                    if (selectedTabItem.IsReady())  
                    {
                        selectedTabItem.Calculate( ); // в конце вычислений обновляет содержимое DawingGroup
                       // this.UpdateLayout();
                        ((Button)sender).IsEnabled = true;
                    }
                } 
        }
  • Вопрос задан
  • 310 просмотров
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
По нажатию - дисэйблить кнопку [и возможно другие связанные элеменыт ui + разлочивать/показывать другие] и потом пускать в отдельном потоке что-то долгое.. по его завершению - разлочивать.

Классика: две кнопки "пуск" и "стоп" + прогрессбар
IsEnabled у кнопок цепляется за булево поле IsProcess (инверсно у пуск и прямо у стоп)
ProgressBar - виден только когда IsProcess == true
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы