BindingList.Clear()不清除List

时间:2017-05-29 14:27:46

标签: c# .net thread-safety bindinglist

我有一个BindingList,我想在某个点清除它并用新对象重新填充它。出于某种原因,Clear-Method有时不起作用。可能是因为竞争条件,因为在事件处理程序中调用了Clear-Method和添加新对象。

我是这样做的:

mydropdown_Validated(object sender, EventArgs e)
{
    myBindingList.Clear();
    foreach(object obj in AnotherListWithObjects)
    {
        object bindingObject = SomeInitializationMethod(obj);
        myBindingList.Add(bindingObject);
    }
}

问题在于它有时会起作用,有时它并不清除列表。因此,有些对象会被多次添加,这会在我的程序中导致异常。

有没有办法强制我的BindingList清除而不必自己删除每个对象或创建一个新的BindingList?我认为这些都是不好的方法。也许以某种方式等待它能够清除或强迫它这样做。也许我做错了什么。 请帮忙。 感谢。

EDIT1:

我能够确定事件处理程序,从而显示的代码运行两次'同时地'因此,使用visual studio很难调试它。我尝试在我的BindingList上使用 lock ,但这也不起作用。

EDIT2

正如hiule所建议的,还有更多代码。可悲的是,我无法发布这一切:

所以基本上,我有一个下拉控件。当每个控件都失去焦点时,该下拉可以自我验证。

我有一个保存方法,通过按钮点击调用。我的所有控件都放在一些LayoutControl上。让我们称之为“basecontrol”#39; 当我按下保存按钮时,它会再次验证所有控件。

mySaveButton_ItemClick(object sender, ItemClickEventArgs e)
{
    basecontrol.ValidateChildren()
    // Saving input
}

所以,当我给我的下拉焦点并通过单击我的保存按钮将其删除时,下拉列表会验证两次。一旦因为失去焦点,一旦因明确调用验证。

我意识到我可以简单地省略显式调用验证,但我认为最好在保存之前进行验证,这样就不会在中间更改任何值。我真的很感激一种解决方案,只允许在两种情况下清除BindingList。它可能是多余的,但它是一个非常短的任务,正如我所说,我希望在保存之前进行验证。 感谢。

0 个答案:

没有答案