C# 使用線程狀態標識替代過時suspend和resumn方法

public partial class MainForm : Form
{
   
public MainForm()
    {
       
this.InitializeComponent();
    }

   
private Thread m_thread = null;
   
private ThreadState m_state = ThreadState.Unstarted;

   
private void HandleTask()
    {
       
this.m_state = ThreadState.Running;
       
int i = 0;
       
while (i < 100000)
        {
           
//已經暫停
             if(this.m_state == ThreadState.Suspended)
               
continue;
           
//請求暫停
              if (this.m_state == ThreadState.SuspendRequested)
            {
               
this.m_state = ThreadState.Suspended;
               
continue;
            }

           
//已經停止
             if (this.m_state == ThreadState.Stopped)
               
break;
           
//請求停止
             if (this.m_state == ThreadState.StopRequested)
            {
               
this.m_state = ThreadState.Stopped;
               
break;
            }

           
//處理主要任務,這裏休息100ms是爲了模擬實際任務的執行時間
            Thread.Sleep(100);
            i
= i + 1;
           
           
//在界面上顯示信息
            this.Invoke(new ShowInfoHandler(this.ShowInfo), new object[] { i });
        }
       
this.m_thread = null;
       
this.m_state = ThreadState.Stopped;
    }

   
public void Start()
    {
       
if (this.m_thread == null)
        {
           
this.m_thread = new Thread(new ThreadStart(this.HandleTask));
           
this.m_thread.Start();
        }
       
if (this.m_state == ThreadState.Suspended)
           
this.m_state = ThreadState.Running;
    }

   
public void Pause()
    {
       
this.m_state = ThreadState.SuspendRequested;
       
while (this.m_state != ThreadState.Suspended)
            Application.DoEvents();
    }

   
public void Stop()
    {
       
this.m_state = ThreadState.StopRequested;
       
while (this.m_state != ThreadState.Stopped)
            Application.DoEvents();
    }

   
private delegate void ShowInfoHandler(int value);
   
private void ShowInfo(int value)
    {
       
this.label1.Text = value.ToString();
    }

   
private void btnRun_Click(object sender, EventArgs e)
    {
       
this.Start();
    }

   
private void btnPause_Click(object sender, EventArgs e)
    {
       
this.Pause();
    }

   
private void btnStop_Click(object sender, EventArgs e)
    {
       
this.Stop();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章