看板 C_Sharp 關於我們 聯絡資訊
為了讓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