WPF CanExecute和ThreadPool

时间:2011-07-29 13:10:47

标签: wpf threadpool canexecute

我的应用程序执行webservice调用,当它发生时,IsExecuting状态设置为true并且执行按钮被禁用。因为在此期间应用程序没有响应,所以我更改了进程,因此执行是在一个单独的线程中进行的。然而,我现在注意到的问题是,执行按钮仍然被禁用,只有当我点击界面时,按钮才会启用。我该如何解决这个问题?

编辑:     在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 个答案:

答案 0 :(得分:2)

那么您需要刷新命令的CanExecute状态吗?只需调用CommandManager.InvalidateRequerySuggested(),这将导致CanExecute在绑定命令上重新评估。

答案 1 :(得分:0)

我认为你应该发布一些代码来更好地理解你的问题。

我很确定这是一个线程问题,因为你无法从不同的Thread更改控件表单的状态。

我认为您需要使用委托来更新其他线程的按钮状态

How to update the GUI from another thread in C#?