1

より集中的で反復的なタスクを高速化するために、いくつかの並列プログラミングを WPF アプリに導入し始めました。実行時間と知覚される UI 応答に顕著な違いが見られるという点で、順調に進んでいます。

私は明らかに、UI スレッドとこれらのタスク スレッドから関連データへの同時アクセスがないように注意を払いました。

しかし - 時々 (常にではありません)、プログラムがクラッシュし、コマンドの CanExecute ハンドラーが並列タスクで処理されている同じデータにアクセスしようとしていることがわかります。または、逆に、データが CanExecute ハンドラーによって既に使用されているため、並列タスクが失敗します。

この問題を整理するための推奨される方法はありますか? CanExecute チェックをオフにすることはできますか? すべての CanExecute メソッドにテストを追加する必要がありますか?

(ちなみに、この問題を見て、私は CanExecute ハンドラーが呼び出される頻度に非常に驚いています! 私の一部は、パフォーマンス上の理由から、コマンドを手動で有効化および無効化する価値があると考えていますが、確かにそれはWPF が私たちにとってより簡単にしようとしている、単純なタスクのようなものです!)

4

1 に答える 1

2

はい、それも気になりました。CanExecute が呼び出される回数です。CanExecute のチェックをほとんど制御できないため、考えられる唯一のオプションは、ハンドラー内のコードを最小化し、CanExecute ローカル フィールドを使用することです。

このようなもの:

CanExecuteSaveData ()
  {
  return _canTheDataBeSaved;
  }

また、同時実行の問題を回避するために、このコードにいくつかの同時実行チェックを組み込みます。

于 2011-05-18T09:36:53.573 に答える