作者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
推 horngsh:try to google multi thread in C# 01/02 08:35
→ remmurds:我照著你文字上的描述自己實作了一次 沒有出現這樣的問題 01/02 23:16
→ remmurds:this.Invoke(labelBack, new object[] {timesNow});這行 01/02 23:18
→ remmurds:究竟是哪個東西變成null你看一下 01/02 23:19
→ tramp:自問自答 因為我在畫圖的地方 有一個line.Add(X,Y);的動作 01/04 20:34
→ tramp:因為加入太多數據 導致line的點數爆掉了 才會有這些問題~"~ 01/04 20:35