0

Java バックグラウンドから来て、双方向バインディング メカニズムとの同期の問題に遭遇しました。コンボボックスの選択項目にバインドされたプロパティがあります。

<ComboBox SelectedItem="{Binding car.hp, Mode=TwoWay}" .../>

OnSelectionChanged イベントで、長時間実行されるコマンドをトリガーします。

private void async() { 
    ...
    await longtermjob();
    ...
}

これはこれまでのところすべて機能します。しかし、コマンドが終了していない間にコンボボックスの選択をすばやく変更すると、無限ループに陥ります。Selected Item は 2 つの値の間で変化し続けます。これがどのように起こるかについてのアイデアはありますか?バインディングがスレッドセーフであることを確認するにはどうすればよいですか?

4

1 に答える 1

3

停止条件なしでイベントのバインドされたプロパティの値を変更すると、データの変更OnSelectionChanged方法に応じて、データの変更によって が起動し続けます。非同期呼び出しが既に進行中かどうかを確認するブール フラグを追加すると、この問題は発生しません。さらに、コントロールを一時的に無効にすることを検討することもお勧めします。

編集/ここに解決策があります:

private bool requestInProcess { get; set; }

private void async() { 
    if (!requestInProcess) { 
        requestInProcess = true;
        await longtermjob();
        requestInProcess = false;
    }
}
于 2013-09-03T11:15:21.937 に答える