none
在form上做委派 RRS feed

  • 問題

  • 各位大大我想請問一下,我在windowform上利用委派做thread,可是發現當我關掉form表單時,他會出現"無法存取已處置的物件",由於找了一段時間,可能是自己的關鍵字打的不對,所以得不到想要的答案,固來這裡,希望各位大大幫忙,謝謝您們
    2009年3月13日 上午 07:28

解答

  • 在多緒的狀況下,除錯時標記行號並不見得是目前錯誤的內容。

    Invoke 是執行緒啟動的方法,只能說在此執行緒內有發生錯誤,或尚未終結,並不能以 IDE 標示的行號為參考依據。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 冰糖旋風 2009年3月16日 上午 01:12
    2009年3月13日 上午 08:12
  • 你可以在this.Invoke的地方用 Try  Catch去處理 ObjectDisposedException
    然後在Catch 到  ObjectDisposedException就啥事都不要做就好了

    • 已標示為解答 冰糖旋風 2009年3月16日 上午 01:12
    2009年3月13日 上午 08:13
    版主

所有回覆

  • 你覺得你這樣問,是把網友當神還是當仙?

    把你的專案複製一份,開始把用不著的類別砍掉,把委派的內容精簡到能重現的最小範圍,比如說空值、無限迴圈,把用不著的控制項也全砍掉,到最後把這個精簡的程式碼貼出來討論。通常這個時候已經不需要討論了,因為當你精簡到這種程度,自己就能除錯。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年3月13日 上午 07:46
  •       抱歉,我將程式碼補充如下,出錯的地方即是紅色的(當form表單關閉時發生),謝謝
             private delegate void InvokeUpdateLabeText(string displayStates,Control ctl);
           private void button2_Click(object sender, EventArgs e)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(SubThread));
                
            }

            private void SubThread(object o)
            {
                    UpdateState("aa", label2);
            }  
          
            private void UpdateState(string state,Control ctl)
            {

                if (ctl.InvokeRequired)
                {
                    this.Invoke(new InvokeUpdateState(this.UpdateState),state,ctl);
                }
                else
                    ctl.Text = state;
            }


    2009年3月13日 上午 07:51
  • 在多緒的狀況下,除錯時標記行號並不見得是目前錯誤的內容。

    Invoke 是執行緒啟動的方法,只能說在此執行緒內有發生錯誤,或尚未終結,並不能以 IDE 標示的行號為參考依據。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 冰糖旋風 2009年3月16日 上午 01:12
    2009年3月13日 上午 08:12
  • 你可以在this.Invoke的地方用 Try  Catch去處理 ObjectDisposedException
    然後在Catch 到  ObjectDisposedException就啥事都不要做就好了

    • 已標示為解答 冰糖旋風 2009年3月16日 上午 01:12
    2009年3月13日 上午 08:13
    版主
  • 謝謝大大们的幫助
    2009年3月16日 上午 01:11