เมธอด Restart() ของคลาส Stopwatch (System.Diagnostics) ใช้หยุดนาฬิกา รีเซ็ตเวลาที่ผ่านไปเป็นศูนย์ และเริ่มนับเวลาใหม่ทันที - เทียบเท่ากับการเรียก Stop() ตามด้วย Reset() และ Start()
รูปแบบการใช้งาน
Stopwatch sw = Stopwatch.StartNew();
// ... ทำงานบางอย่าง ...
sw.Restart(); // รีเซ็ตเป็น 0 และเริ่มนับใหม่ทันที
โค้ดตัวอย่างสมบูรณ์
using System;
using System.Threading;
using System.Diagnostics;
public class Demo
{
public static void Main()
{
Stopwatch sw = Stopwatch.StartNew();
Console.WriteLine("เริ่มจับเวลา...");
Thread.Sleep(500); // จำลองงาน 500 ms
Console.WriteLine($"ก่อน Restart: {sw.ElapsedMilliseconds} ms");
// รีเซ็ตเป็นศูนย์และเริ่มนับใหม่
sw.Restart();
Console.WriteLine("หลัง Restart - เริ่มนับใหม่...");
Thread.Sleep(500); // จำลองงานอีก 500 ms
Console.WriteLine($"หลังทำงานครั้งที่ 2: {sw.ElapsedMilliseconds} ms");
Console.WriteLine($"เวลาทั้งหมด (Elapsed): {sw.Elapsed}");
// แสดงความแตกต่างระหว่าง Restart และ Reset
Console.WriteLine("\n--- เปรียบเทียบ Restart vs Reset ---");
Stopwatch sw2 = Stopwatch.StartNew();
Thread.Sleep(200);
Console.WriteLine($"ก่อน Reset: {sw2.ElapsedMilliseconds} ms");
sw2.Reset(); // หยุดและรีเซ็ต แต่ไม่เริ่มนับใหม่
Console.WriteLine($"หลัง Reset: {sw2.ElapsedMilliseconds} ms (หยุดนับ)");
sw2.Start(); // ต้องเรียก Start() เอง
Thread.Sleep(200);
Console.WriteLine($"หลัง Start ใหม่: {sw2.ElapsedMilliseconds} ms");
}
}
ผลลัพธ์
เริ่มจับเวลา...
ก่อน Restart: 500 ms
หลัง Restart - เริ่มนับใหม่...
หลังทำงานครั้งที่ 2: 500 ms
เวลาทั้งหมด (Elapsed): 00:00:01.0001234
--- เปรียบเทียบ Restart vs Reset ---
ก่อน Reset: 200 ms
หลัง Reset: 0 ms (หยุดนับ)
หลัง Start ใหม่: 200 ms
Restart() vs Reset() vs Stop()
| เมธอด | หยุดนับ | รีเซ็ตเป็น 0 | เริ่มนับใหม่ |
|---|---|---|---|
Restart() | ✓ | ✓ | ✓ (ทันที) |
Reset() | ✓ | ✓ | ✗ (ต้องเรียก Start() เอง) |
Stop() | ✓ | ✗ | ✗ (ต้องเรียก Start() เอง) |
กรณีการใช้งานทั่วไป
// 1. จับเวลาหลายรอบ (Lap timing)
Stopwatch sw = Stopwatch.StartNew();
for (int i = 1; i <= 3; i++)
{
DoWork();
Console.WriteLine($"รอบ {i}: {sw.ElapsedMilliseconds} ms");
sw.Restart(); // เริ่มจับรอบใหม่
}
// 2. วัดเวลาที่แยกต่างหาก (ไม่ต้องการรวมเวลารอ)
Stopwatch sw = Stopwatch.StartNew();
DoWork();
sw.Stop(); // หยุดขณะรอ Input
WaitForUserInput();
sw.Start(); // เริ่มนับต่อ (สะสมเวลา)
// หรือใช้ Restart() หากต้องการเริ่มนับใหม่จากศูนย์
ข้อควรระวัง
Restart()เหมาะสำหรับการจับเวลาแบบ "Lap" หรือเริ่มวัดใหม่จากศูนย์- หากต้องการสะสมเวลา (Pause/Resume) ให้ใช้
Stop()และStart()แทน Elapsedคืนค่าTimeSpanใช้ElapsedMillisecondsหรือElapsedTicksสำหรับค่าตัวเลข- Stopwatch ใช้ High-Resolution Timer (QueryPerformanceCounter บน Windows) - แม่นยำกว่า DateTime