今天在寫一個簡單的<開始><暫停><停止>同一個thread, 發現thread一旦被suspended, 則必須透過
try
{
gProcThread.Abort();
}
catch (ThreadStateException)
{
gProcThread.Resume();
}
的方式正常釋放!!
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();
}