C# 为什么Linq BindingSource抛出ObjectDisposedException?
我有一个BindingSource,当有人启动向导表单的进程时,它会填充BindingList: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&
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
billRunID
将被发送到GetBillRuns
查询,具体取决于开始时选择的屏幕选项
是什么导致了ObjectDisposedException
在使用
GetBillRuns
方法重新填充之前,是否需要清除BindingSource或执行其他操作?如何侦听bindingSourceBillRun
的Disposed事件?我认为误解是“在处理对象之后,引用变成了空指针,因此将光标悬停在对象上不应该显示其成员”。@kennyzx这是个好主意。我为BindingSource的Disposed事件添加了一个处理程序,但从未命中它。我认为BindingSource实例中有一些东西被释放了。我不知道。我可以用try/catch来概括它,但这只是解决了一个问题,而不理解为什么会这样。
void EndEdit()
{
bindingSourceBillRun.EndEdit();
}