WPF CanExecute и ThreadPool - PullRequest
       32

WPF CanExecute и ThreadPool

0 голосов
/ 29 июля 2011

Мое приложение выполняет вызов веб-службы, и когда это происходит, статус IsExecuting устанавливается в значение true, а кнопка выполнения отключается. Поскольку приложение не отвечает на запросы в этот период, я изменяю процесс, поэтому выполнение происходит в отдельном потоке. Однако проблема, которую я сейчас замечаю, заключается в том, что кнопка «Выполнить» по-прежнему отключена, и только когда я нажимаю на «Интерфейс», кнопка активируется. Как я могу это исправить?

EDIT: В Codebehind:

private void Execute()
{
    ThreadPool.QueueUserWorkItem(new WaitCallback(ExecuteThread));
}

private bool CanExecute
{
    get  { return !IsExecuting; }
}

private void ExecuteThread(Object o)
{
    IsExecuting = true;

    // Process execution here ...

    IsExecuting = false;
}


In Xaml:

<Button Content="Execute" Command="{Binding Path=ExecCommand}"/>

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Итак, вам нужно обновить статус CanExecute ваших команд?Просто позвоните CommandManager.InvalidateRequerySuggested(), это приведет к переоценке CanExecute для связанных команд.

0 голосов
/ 29 июля 2011

Я думаю, вам следует опубликовать некоторый код, чтобы лучше понять вашу проблему.

Я совершенно уверен, что это проблема с потоком, поскольку вы не можете изменить статус формы элемента управления из другого потока.

Я думаю, все, что вам нужно, это использовать делегат для обновления статуса вашей кнопки из другого потока

Как обновить графический интерфейс из другого потока в C #?

...