作者tramp (无法控制的思绪)
看板C_Sharp
标题[问题] 遇到"无法存取已处置的物件"
时间Sat Jan 2 04:14:53 2010
为了让label随着计算不断地更新
所以我设定了
delegate void
SetLabelAsCallBack(
string text);
在thread跑的时候
会呼叫下面这个function来更新label
private void renderLableTimes(
string timesNow)
{
if (
this.labelEpochNow.InvokeRequired)
{
SetLabelAsCallBack labelBack = new
SetLabelAsCallBack(renderLableEpochs);
this.Invoke(labelBack,
new object[] { timesNow });
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
问题出在这一行
显示的例外是 ObjectDisposedException
无法存取以处置的物件
}
else
{
this.labelEpochNow.Text =
"Times" + timesNow;
}
}
我的程式是这样的
启动程式之後
label会不断地更新该label的数值
然後我有另外一个地方(B地方)会使用到该label的值(就是上面的
timesNow)
我设定了一个checkBox来决定B地方是否执行(其实就是画图)
假如程式一开始的地方B处就是执行的
就很顺利的一直跑
当程式正在跑的时候
我想让B停止画图 程式继续跑 只剩下label继续更新数值
这个时候就会当掉出现上面的错误例外
我查了网路
用try catch将this.Invoke(....)这行包起来之後
有出现其他的错误例外
最後是跑到
Application.Run(
new MyGame());
显示IndexOutOfRangeException例外
或者是
NullReferenceException例外
但我不知道该怎麽去处理这样的问题
是因为thread在跑的关系 导致原本我的程式MyGame变成了null
以至於读取不到timesNow的数值吗@@?
烦请板上大大可以帮我解决这个难题~"~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.44.27
1F:推 horngsh:try to google multi thread in C# 01/02 08:35
2F:→ remmurds:我照着你文字上的描述自己实作了一次 没有出现这样的问题 01/02 23:16
3F:→ remmurds:this.Invoke(labelBack, new object[] {timesNow});这行 01/02 23:18
4F:→ remmurds:究竟是哪个东西变成null你看一下 01/02 23:19
5F:→ tramp:自问自答 因为我在画图的地方 有一个line.Add(X,Y);的动作 01/04 20:34
6F:→ tramp:因为加入太多数据 导致line的点数爆掉了 才会有这些问题~"~ 01/04 20:35