中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

C#中ManualResetEvent實現線程的暫停與恢復

c#
小云
149
2023-08-08 14:47:15
欄目: 編程語言

在C#中,可以使用ManualResetEvent來實現線程的暫停和恢復。ManualResetEvent是一個同步對象,它包含一個布爾值,表示是否發出信號。當布爾值為true時,表示信號已發出,線程可以繼續執行;當布爾值為false時,表示信號未發出,線程需要暫停等待。

下面是一個示例代碼,演示了如何使用ManualResetEvent來實現線程的暫停和恢復:

using System;
using System.Threading;
public class Program
{
private static ManualResetEvent pauseEvent = new ManualResetEvent(true); // 初始狀態為true,線程可以繼續執行
public static void Main(string[] args)
{
Thread thread = new Thread(WorkerThread);
thread.Start();
Console.WriteLine("Press any key to pause the thread...");
Console.ReadKey();
PauseThread(); // 暫停線程
Console.WriteLine("Press any key to resume the thread...");
Console.ReadKey();
ResumeThread(); // 恢復線程
Console.WriteLine("Press any key to stop the thread...");
Console.ReadKey();
StopThread(); // 停止線程
}
private static void WorkerThread()
{
while (true)
{
// 檢查是否暫停線程
pauseEvent.WaitOne();
// 執行任務
Console.WriteLine("Working...");
// 模擬耗時操作
Thread.Sleep(1000);
}
}
private static void PauseThread()
{
pauseEvent.Reset(); // 設置為false,線程將暫停等待
}
private static void ResumeThread()
{
pauseEvent.Set(); // 設置為true,線程將繼續執行
}
private static void StopThread()
{
pauseEvent.Set(); // 設置為true,確保線程可以繼續執行以結束循環
// 其他處理邏輯...
// 終止線程
Environment.Exit(0);
}
}

在上面的示例中,程序創建了一個線程(WorkerThread),并在主線程中通過按鍵的方式來控制線程的暫停和恢復。在WorkerThread中,使用pauseEvent的WaitOne方法來檢查是否暫停線程,如果暫停,則線程會處于等待狀態,直到調用ResumeThread方法將pauseEvent設置為true,線程才會繼續執行。

需要注意的是,使用ManualResetEvent來實現線程的暫停和恢復時,線程不能被阻塞在其他的同步對象(如Mutex、Semaphore等)上,否則可能會出現死鎖的情況。

0
鹤庆县| 瓮安县| 平乡县| 象山县| 日土县| 永定县| 甘洛县| 太仆寺旗| 林甸县| 宽甸| 胶南市| 永胜县| 山西省| 龙岩市| 都昌县| 石狮市| 德州市| 长葛市| 甘肃省| 抚顺县| 甘南县| 安平县| 贡觉县| 资阳市| 兴宁市| 峡江县| 伊宁县| 泽普县| 揭阳市| 化德县| 望谟县| 东港市| 旬邑县| 柳河县| 陆川县| 时尚| 嵊州市| 岑巩县| 澜沧| 山东省| 广汉市|