偶尔我在BindingsCollection中得到一个System.ArgumentOutOfRangeException

时间:2012-01-15 16:37:01

标签: c# .net winforms exception

有时当我想显示用户控件并设置其绑定时,我得到一个System.ArgumentOutOfRangeException。当我点击继续时,操作将被中止,但当我再次执行相同的操作时,用户控件将正确显示。我无法重现这个问题。

我已经阅读了一些在更新期间更改了BingdinsCollection的问题。但我不能指出我项目中的特定代码。它可以与窗口手柄有关吗?

************** Exception Text **************
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.Collections.ArrayList.get_Item(Int32 index)
   at System.Windows.Forms.BindingsCollection.get_Item(Int32 index)
   at System.Windows.Forms.Control.UpdateBindings()
   at System.Windows.Forms.Control.OnBindingContextChanged(EventArgs e)
   at System.Windows.Forms.ContainerControl.OnCreateControl()
   at System.Windows.Forms.UserControl.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
   at System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e)
   at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Control.set_Visible(Boolean value)
   .. my click

2 个答案:

答案 0 :(得分:0)

您是否在另一个线程上设置了BindingSource?或者在另一个线程上执行任何,这可能会导致DataBindings集合在枚举时被更改?

从框架来源看,这看起来是唯一可能发生的方式。

来自Control.cs

 private void UpdateBindings()
    {
      for (int index = 0; index < this.DataBindings.Count; ++index)
        BindingContext.UpdateBinding(this.BindingContext, ((BindingsCollection) this.DataBindings)[index]);
    }

来自BindingsCollection.cs

public Binding this[int index]
{
  get
  {
    return (Binding) this.List[index];
  }
}

答案 1 :(得分:0)

从异常堆栈跟踪中,看起来您正在更改控件的可见性,但绑定到控件的ArrayList没有正确的控件条目。

我会尝试更改您执行操作的顺序。例如,如果你是绑定然后显示,我会改变这个过程。