为什么Linq BindingSource抛出ObjectDisposedException?

时间:2017-05-01 21:28:44

标签: c# winforms linq visual-studio-2015 bindingsource

当有人启动我们的向导表单进程时,我有一个 BindingSource ,其中填充了 BindingList

private void GetBillRuns(int billRunID)
{
    bindingSourceBillRun.DataSource =  ((IListSource)BillRunDC.ub_bill_runs.Where(b => b.bill_run_id == billRunID)).GetList() as BindingList<ub_bill_run>;
}

如果有人单击“后退”按钮,他们可以选择其他“向导”选项并继续前进。每次更改Panel索引时都会调用 EndEdit()例程:

void EndEdit()
{
    bindingSourceBillRun.EndEdit();
}

在向导表单中,单击“后退”按钮时, BindingSource 将被清除。在关闭并处理实际的向导表单之前, BindingSource 本身永远不会被处理掉。

我们有一个有趣的错误:

  • 我们可以启动向导面板表单,选择一个选项并单击“下一步”。
  • 我们可以在向导面板表单中返回1到第一步。
  • 我们可以选择其他选项,再次点击“下一步”,我们会收到 ObjectDisposedException

如屏幕截图所示, ObjectDisposedException 已停止代码。此外,你可以看到我已经悬停在BindingSource上,而BindingSource没有被处理掉。此外,与之关联的数据源具有似乎也不会被丢弃的数据。

screenshot

显然,根据在开始时选择的屏幕选项,将向billRunID查询发送不同的GetBillRuns

导致 ObjectDisposedException 的原因是什么?

在使用GetBillRuns方法重新填充之前,是否需要清除 BindingSource

0 个答案:

没有答案