C# DomainDataSourceView MoveCurrentTo。。。不断循环

C# DomainDataSourceView MoveCurrentTo。。。不断循环,c#,.net,silverlight,C#,.net,Silverlight,什么时候 DomainDataSourceView.MoveCurrentToNext() 及 DomainDataSourceView.MoveCurrentToPrevious() 以非特定顺序调用多次DomainDataSourceView会陷入某种循环中,其中CurrentItem不断从集合更改为随机项。 停止的唯一方法是关闭Silverlight应用程序。 这是一个已知的问题吗 以下是silverlight mvvm应用程序中的调用顺序: 按钮被点击 绑定到按钮的RelayComma

什么时候

DomainDataSourceView.MoveCurrentToNext()

DomainDataSourceView.MoveCurrentToPrevious()

以非特定顺序调用多次DomainDataSourceView会陷入某种循环中,其中CurrentItem不断从集合更改为随机项。 停止的唯一方法是关闭Silverlight应用程序。 这是一个已知的问题吗

以下是silverlight mvvm应用程序中的调用顺序:

  • 按钮被点击
  • 绑定到按钮的RelayCommand触发canexecute方法(返回true)
  • 执行该命令的方法并调用DataView.MoveCurrentToNext()
  • 为第一个back调用RaiseCanExecuteChanged方法- next-last按钮命令(全部返回false)
  • viewmodel上的CurrentEntity属性更改为当前属性 来自域数据源的项
  • 为当前实体异步加载某些数据
当“下一步”按钮被快速点击数次时,它开始循环。 当点击间隔稍大时,没有问题

它几乎像MoveCurrentToNext一样在处理第一次单击时再次执行。 使用断点进行调试时,这种情况永远不会发生。在所有方法中添加断点 循环时,永远不会被击中。
有人知道如何解决这个问题,或者是什么原因导致了这个问题吗?

很难说,因为我们没有任何正在发生的事件的源代码,但是如果你正在处理一个竞赛条件(看起来你可能会),你必须像处理任何其他竞赛条件一样处理它。也就是说,你必须阻止事情发生,以确保它不会被点击(例如,在事件链完成之前禁止点击按钮)。我不得不在Silverlight中经常这样做。这似乎是一个竞赛条件,事实上,不可能找到确切的问题,因为当我添加断点时它不会发生。当一个断点被点击时,Silverlight没有响应,所以我不能快速点击任何其他按钮。我不得不做的很多事情是在发生时连锁事件并禁用部分UX。然后,当链结束时,我再次启用了所有功能。这是因为Silverlight是完全异步的。嗯,我会看看它,并确保在它应该被禁用的时候所有东西都被禁用。你的评论让我看到了真正的问题,MoveCurrentTo。。。。方法都是异步的,当在毫秒内调用多个方法时,您无法确定哪一个将最后完成。其中一个调用位于另一个调用之前的if语句中,这导致它们几乎同时被调用。现在正在修复,看起来很有希望。