WPF CanExecute和ThreadPool

WPF CanExecute和ThreadPool,wpf,threadpool,canexecute,Wpf,Threadpool,Canexecute,我的应用程序执行webservice调用,当调用发生时,IsExecuting状态设置为true,执行按钮被禁用。因为应用程序在此期间没有响应,所以我更改了进程,以便在单独的线程中执行。然而,我现在注意到的问题是,execute按钮仍然被禁用,只有当我点击界面时,按钮才会被启用。我怎样才能解决这个问题 编辑: 在代码隐藏中: private void Execute() { ThreadPool.QueueUserWorkItem(new WaitCallback(ExecuteThre

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

编辑: 在代码隐藏中:

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}"/>
private void Execute()
{
QueueUserWorkItem(新的WaitCallback(ExecuteThread));
}
私人厕所
{
获取{return!IsExecuting;}
}
私有void ExecuteThread(对象o)
{
IsExecuting=true;
//这里的进程执行。。。
IsExecuting=false;
}
在Xaml中:

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

我很确定这是一个线程问题,因为您无法从其他线程更改控件窗体的状态

我认为你需要做的就是使用一个代理从其他线程更新你的按钮的状态


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

我尝试将其添加为ExecuteThread方法的最后一行,但没有帮助。@Sys,尝试在UI线程上调用此方法(使用Dispatcher.Current.Invoke)我尝试了Application.Current.Dispatcher.Invoke(新操作(委托{IsExecuting=true;}));但同样不起作用…您可以在任何线程上分配属性,这无关紧要。我告诉过你要尝试的是在UI上调用CommandManager.InvalidateRequestSuggested()