2011-07-29 4 views
0

私のアプリケーションはWebサービス呼び出しを実行し、実行するとIsExecutingステータスがtrueに設定され、実行ボタンが無効になります。アプリケーションはこの期間中応答しないので、私は別のスレッドで実行されているようにプロセスを変更します。しかし、私が今気づいている問題は、実行ボタンがまだ無効になっていて、インターフェイスをクリックしてボタンが有効になったときだけです。どうすればこの問題を解決できますか?WPF CanExecuteとThreadPool

EDIT:分離コードで :

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

他のスレッドからあなたのボタンの状態を更新するために、デリゲートを使用していると思いますか? CommandManager.InvalidateRequerySuggested()に電話すると、バインドされたコマンドでCanExecuteが再評価されます。

+0

私はこれをExecuteThreadメソッドの最後の行に追加することでこれを試しましたが、それは役に立ちませんでした。 – Sys

+2

@Sys、(Dispatcher.Current.Invokeを使用して)UIスレッドでこのメソッドを呼び出そうとしました。 –

+0

私はApplication.Current.Dispatcher.Invokeを試しました(新しいアクション(デリゲート{IsExecuting = true;})));しかし再び動作しません... – Sys

0

私はあなたがより良いあなたの問題を理解するためにいくつかのコードを投稿するべきだと思います。

コントロールのフォームのステータスを別のスレッドから変更できないため、スレッドの問題であると確信しています。

私はあなたのために必要なすべてがあなたがあなたのコマンドのCanExecute状態をリフレッシュする必要が

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

+0

私はコードスニペットを追加しました – Sys

関連する問題