2011-07-29 52 views
0

我的應用程序執行Web服務調用,當它發生時,IsExecuting狀態設置爲true,並且執行按鈕被禁用。由於在此期間應用程序沒有響應,因此我更改了進程,以便在單獨的線程中執行。然而,我現在注意到的問題是,執行按鈕仍然被禁用,只有當我點擊界面按鈕啓用。我怎樣才能解決這個問題?WPF CanExecute和線程池

編輯: 在代碼隱藏:

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

所以你需要刷新你的命令的CanExecute狀態更新按鈕的狀態?只需撥打CommandManager.InvalidateRequerySuggested(),這將導致CanExecute在綁定命令上被重新評估。

+0

我已經試過這一點,但它並沒有幫助。 – Sys

+2

@sys,試圖調用UI線程這種方法(使用Dispatcher.Current.Invoke) –

+0

我試過Application.Current.Dispatcher.Invoke(新的行動(代表{IsExecuting = TRUE;}));但再次不工作... – Sys

0

我想你應該張貼一些代碼,以便更好地理解您的問題。

我敢肯定這是一個線程問題,因爲你不能從一個不同的線程控制的表單的狀態改變。

我認爲,所有你需要的就是使用委託給其他線程

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

+0

我可以將其作爲在ExecuteThread方法的最後一行添加一段代碼 – Sys