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();
}
}
C# 使用線程狀態標識替代過時suspend和resumn方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
C# 拖動過程中修改光標樣式
泉水老叮当
2020-06-24 16:25:27
使用C# ASP.NET Web API開發供Unity WebGL使用的HTTP接口(一)
Mr-Miracle
2020-06-15 12:17:20
使用C# ASP.NET Web API開發供Unity WebGL使用的HTTP接口(三)
Mr-Miracle
2020-06-15 12:17:20
使用C# ASP.NET Web API開發供Unity WebGL使用的HTTP接口(二)
Mr-Miracle
2020-06-15 12:17:20
Sqlite: 在C#程序中的應用
泉水老叮当
2020-03-17 18:32:57
C# 自定義類庫並使用 —— 詳解過程
浪子花梦
2020-02-23 10:02:08
C# 類的三大特性 —— "屬性、方法、事件" 詳解
浪子花梦
2020-02-23 10:01:58
C# SQL語句中添加變量條件
宝付支
2018-12-07 13:47:41
C# 的 委託和事件
宝付支
2018-11-13 23:01:04
軟件架構MVC, MVP, MVVM
泉水老叮当
2018-09-05 04:21:38
C# async await task 的學習
泉水老叮当
2018-09-05 04:21:38
利用Tlbimp.exe和AxImp.exe將ocx 控件轉換爲公共語言類型程序集
泉水老叮当
2018-09-05 04:21:37