该对象当前正在其它地方使用

yeefa 2012-06-06 03:30:19
我要做一个WinForm程序,当我单击列表中的某一条记录的时候,WinForm自动加载显示与该条记录相关的数据信息,为了有更好的用户体验,我在WinForm程序加载相关数据的时候显示等待对话框,过程序相关代码如下:



public void FillSbjForStudent()
{
if (bASStudentBindingSource.Current != null)
{
DataRowView dr = (DataRowView)this.bASStudentBindingSource.Current;
BASStudentManager manger = new BASStudentManager();
ThreadStart starter = delegate
{
manger.FillBASSbjForStudent(this.dsSbjForStudent.BASSbjForStudent, new Guid(dr["StudentID"].ToString()));
};
loading.Loading(starter);
}
}

public class BASLoading
{
public static bool IsOpen = false;

public void Loading(ThreadStart starter)
{
#region 加载数据动态效果
try
{
TBI.BaseUserControl.FrmLoading frm = new FrmLoading();
IsOpen = false;

starter += delegate {
while (true)
{

if (IsOpen)
{
frm.Close();
break;
}

}
};
Thread th = new Thread(starter);
th.Start();
frm.ShowDialog();
}
catch(Exception ex)
{

}
#endregion
}
}



运行的时候,偶尔会出现如题目所示的错误提示

各位大牛,这个问题该怎么解决呢?
...全文
403 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
花痴 2012-06-07
  • 打赏
  • 举报
回复
声明一个静态变量:
private static readonly object lockder = new object();

starter += delegate {
lock(locker)
{while (true)
{

if (IsOpen)
{
frm.Close();
break;
}

}
}
};
yeefa 2012-06-07
  • 打赏
  • 举报
回复
自已顶一下
yeefa 2012-06-06
  • 打赏
  • 举报
回复
在线程中没有加锁,网上看到别人的贴子也是这么说,但是不知道在哪里加锁
bdmh 2012-06-06
  • 打赏
  • 举报
回复
starter中做什么了,报错时出现在哪里,线程中有没有加锁,造成访问冲突
soul850522 2012-06-06
  • 打赏
  • 举报
回复
对象没有关闭

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧