来自Java背景我遇到了双向绑定机制的同步问题。我有一个绑定到组合框上的选择项的属性。
<ComboBox SelectedItem="{Binding car.hp, Mode=TwoWay}" .../>
在OnSelectionChanged事件中,我触发长时间运行命令。
private void async() {
...
await longtermjob();
...
}
到目前为止,这一切都有效。但是如果我在命令尚未完成时快速更改组合框选择,我会遇到无限循环。选定项目在两个值之间不断变化。任何想法如何发生这种情况?我怎样才能确保绑定是线程安全的?
答案 0 :(得分:3)
如果在没有停止条件的情况下更改事件中绑定属性的值,则数据更改将继续导致OnSelectionChanged
触发,具体取决于您更改数据的方式。如果添加一个布尔标志来检查异步调用是否已在进行中,则不应遇到此问题。此外,我还建议您考虑暂时禁用控件。
编辑/这是解决方案:
private bool requestInProcess { get; set; }
private void async() {
if (!requestInProcess) {
requestInProcess = true;
await longtermjob();
requestInProcess = false;
}
}