powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как организовать кнопочки "Do" & "Cancel"?
13 сообщений из 13, страница 1 из 1
Как организовать кнопочки "Do" & "Cancel"?
    #40105529
SlavaTrim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите пожалуйста!

Имею две команды во ViewModel (это библиотека, хотелось, чтобы работало везде, не только в (U)WPF):
- Do - запускает асинхронную команду;
- Cancel - отменяет предыдущую.
Работают отлично, но нужно, что бы привязанные кнопки были: Do - не активна во время выполнения, активна в противном случае, а Cancel зеркальна Do.
Что только не пробовал - получаю весь спектр ошибок: от "Вызывающий поток не может получить доступ" до просто неизменного состояния.

Спасибо
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105534
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavaTrim
Здравствуйте, помогите пожалуйста!

Имею две команды во ViewModel (это библиотека, хотелось, чтобы работало везде, не только в (U)WPF):
- Do - запускает асинхронную команду;
- Cancel - отменяет предыдущую.
Работают отлично, но нужно, что бы привязанные кнопки были: Do - не активна во время выполнения, активна в противном случае, а Cancel зеркальна Do.
Что только не пробовал - получаю весь спектр ошибок: от "Вызывающий поток не может получить доступ" до просто неизменного состояния.

Спасибо


1. "что бы" - вы уверены, что в вашей фразе так должно быть написано?
2. https://www.sql.ru/forum/wpf-silverlight
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105538
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
меня состояние кнопок до запуска асинхронной операции и после её завершения\отмены, не?
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105550
SlavaTrim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvaloniaUI там же?
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105551
SlavaTrim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes
меня состояние кнопок до запуска асинхронной операции и после её завершения\отмены, не?
Была куча вариантов, только все плохие...
На Do можно нажимать сколько угодно, лишь бы не команда не была вызвана...
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105559
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavaTrim,
самый простой вариант
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
   private bool _isDoRunung = false;
    public void Do()
    {
        if (_isDoRunung) return;

        try
        {
            _isDoRunung = true;
            //твои обработки
        }
        finally
        {
            _isDoRunung = false;
        }
    }


И также у Command в WPF есть флаг CanExecute.
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105562
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://www.google.com/search?q=wpf async icommand
первые 2 постинга в выдаче уже вполне исчерпывающе описывают решение
недоступность кнопки Cancel во время доступности кнопки Do делается элементарно стилевым триггером в xaml-разметке
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105583
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavaTrim
Roman Mejtes
меня состояние кнопок до запуска асинхронной операции и после её завершения\отмены, не?
Была куча вариантов, только все плохие...
На Do можно нажимать сколько угодно, лишь бы не команда не была вызвана ...


Вот, уже просматривается логика !

Do - команда выполняется
Do - не команда не выполняется

но терзают смутные сомнения, что утеряны еще два варианта
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105971
SlavaTrim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны
https://www.google.com/search?q=wpf async icommand
первые 2 постинга в выдаче уже вполне исчерпывающе описывают решение
недоступность кнопки Cancel во время доступности кнопки Do делается элементарно стилевым триггером в xaml-разметке
именно так всё и пытался, там к слову, неполный вариант, у меня ещё имеется - CancellationTokenSource
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40105976
SlavaTrim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS
триггеры там не при делах - по идеи сам должен следить за can execute
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40106080
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavaTrim
именно так всё и пытался, там к слову, неполный вариант, у меня ещё имеется - CancellationTokenSource

И? Вы хотите, чтобы аудитория угадала, что у вас не получилось, не видя вашего кода?

SlavaTrim
PS
триггеры там не при делах - по идеи сам должен следить за can execute

За CanExecute следит тот ICommandSource, к которому привязана команда. Сама команда не следит ни за чем, и понятия не имеет, к чему она привязана. У вас что, требуемая асинхронная команда привязана и к Do, и к Cancel?
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40106128
SlavaTrim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вроде справился, но
Код: xml
1.
2.
3.
<Button IsEnabled="{Binding CanDo}"
        Command="{Binding AsyncTest}"/>
<Button Command="{Binding CancelTest, UpdateSourceTrigger=PropertyChanged}"/>


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
        public bool CanDo
        {
            get => _canDo;
            set
            {
                if (Set(ref _canDo, value)) CancelTest.RaiseCanExecuteChanged();
            }
        }
//в конструкторе:
            CancellationTokenSource cancellationTokenSource = new ();
//Асинхронная команда
            AsyncTest = new AsyncCommand(AsyncTestDo, cancellationTokenSource, errorCancelHandler: _errorCancelHandler);
//Обычная команда
            CancelTest = new Command(
                () => AsyncTest.Cancel(), 
                () => !CanDo && !cancellationTokenSource.IsCancellationRequested, 
                _errorCancelHandler);


        private async Task AsyncTestDo(CancellationToken? c)
        {
            try
            {
                CanDo = false;
		while (true)
                {
                    if (c?.IsCancellationRequested ?? false)
                    {
                        throw new OperationCanceledException("Отменили эту бодягу))))");
                    }
//тут что-то делаем
		}
            }
            finally
            {
                CanDo = true;
                AsyncTest?.ResetCancel();
            }
        }

ЧТО НЕ КАК:
1. Многа букф для простейшей вещи: CancellationSource.Cancel()
2. Кнопка "отменить" гаснет при помощи canExecute, а основная через XAML (кажется корявым)
3 Не нравится как-то этот код...
...
Рейтинг: 0 / 0
Как организовать кнопочки "Do" & "Cancel"?
    #40108737
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlavaTrim,

ICommand.CanExecute
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как организовать кнопочки "Do" & "Cancel"?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]