Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Linq BindingSource抛出ObjectDisposedException?_C#_Winforms_Linq_Visual Studio 2015_Bindingsource - Fatal编程技术网

C# 为什么Linq BindingSource抛出ObjectDisposedException?

C# 为什么Linq BindingSource抛出ObjectDisposedException?,c#,winforms,linq,visual-studio-2015,bindingsource,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&

我有一个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>;
}
在向导窗体中,单击“上一步”按钮时,将清除BindingSource。在关闭并释放实际向导窗体之前,永远不会释放BindingSource本身

我们有一个有趣的bug:

  • 我们可以启动向导面板窗体,选择一个选项并单击“下一步”
  • 我们可以返回到向导面板窗体中的第一步
  • 我们可以选择一个不同的选项,再次单击“下一步”,得到一个ObjectDisposedException
如屏幕截图所示,ObjectDisposedException已停止代码。另外,您可以看到我已将鼠标悬停在BindingSource上,但它没有被释放。此外,与之关联的数据源具有看起来也未被处置的数据

显然,不同的
billRunID
将被发送到
GetBillRuns
查询,具体取决于开始时选择的屏幕选项

是什么导致了ObjectDisposedException


在使用
GetBillRuns
方法重新填充之前,是否需要清除BindingSource或执行其他操作?

如何侦听
bindingSourceBillRun
的Disposed事件?我认为误解是“在处理对象之后,引用变成了空指针,因此将光标悬停在对象上不应该显示其成员”。@kennyzx这是个好主意。我为BindingSource的Disposed事件添加了一个处理程序,但从未命中它。我认为BindingSource实例中有一些东西被释放了。我不知道。我可以用try/catch来概括它,但这只是解决了一个问题,而不理解为什么会这样。
void EndEdit()
{
    bindingSourceBillRun.EndEdit();
}