今天在寫一個簡單的<開始><暫停><停止>同一個thread, 發現thread一旦被suspended, 則必須透過

          try
          {
              gProcThread.Abort();
          }
          catch (ThreadStateException)
           {
               gProcThread.Resume();
           }

的方式正常釋放!!

image

private void ProcControlStartBtn_Click(object sender, EventArgs e)
   {
       ProcControlStartBtn.Enabled = false;
       ProcControlPauseBtn.Enabled = true;
       ProcControlStopBtn.Enabled  = true;
       gProcStatus = ProcStatus.Running;          // 更新執行狀態
       gProcThread = new Thread(new ThreadStart(ProcessControl));
       gProcID = ProcID.AllMotorGoHomeExceptDTX;
       gProcThread.Start();           
   }

private void ProcControlPauseBtn_Click(object sender, EventArgs e)
    {
        if (ProcControlPauseBtn.Text == "暫停")
        {
            ProcControlPauseBtn.Text = "繼續";
            gProcThread.Suspend();
            gProcStatus = ProcStatus.Pause;          // 更新執行狀態: 暫停               
        }
        else
        {
            ProcControlPauseBtn.Text = "暫停";
            gProcID = gProcID - 1;
            gProcStatus = ProcStatus.Running;        // 更新執行狀態: 繼續Running
            gProcThread.Resume();
           
        }
    }

private void ProcControlStopBtn_Click(object sender, EventArgs e)
   {
       ProcControlStopBtn.Enabled  = false;
       ProcControlPauseBtn.Enabled = false;
       ProcControlStartBtn.Enabled = true;
       ProcControlPauseBtn.Text = "暫停";
       gProcStatus = ProcStatus.Stop;               // 更新執行狀態: 暫停
       if (gProcThread.IsAlive)
       {
           try
           {
               gProcThread.Abort();
           }
           catch (ThreadStateException)
           {
               gProcThread.Resume();
           }

       }
       StopAllMotors();
   }

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 me1237guy 的頭像
    me1237guy

    天天向上

    me1237guy 發表在 痞客邦 留言(0) 人氣()