Khi làm với WinForms, .Net luôn có sẵn một Thread gọi là Main/UI Thread để dành cho việc hiển thị GUI (windows and its controls) trên màn hình.
Theo đề bài của bạn. Từ Winform tạo ta 10 thread chạy và có thể pause và resume. Cho nên solution cho vấn đề này sẽ cần System.Threading namepsace. (Mình không biết bạn đang dùng .Net Framework version mấy nhưng System.Threading luôn luôn có). Sau đó bạn tìm hiểu 2 đối tượng sau:
- ManualResetEvent: Giúp quản lý tiến trình chạy của Thread (có thể pause và resume)
- ThreadPool: Giúp quản lý 10 Threads bạn đang tạo tránh trường hợp "đụng chạm" với thằng Main/UI thread của WinForms (nó sẽ thường làm windows unresponsive ngay).
Code ví dụ:
Mã:
class Program
{
private static Dictionary<int, ThreadInfo> threads = new Dictionary<int, ThreadInfo>();
static void Main(string[] args)
{
if (!threads.ContainsKey(index))
{
// Chay 1 thread moi
var thread = new Thread(RunThread);
thread.Start();
var mres = new ManualResetEvent(true);
var info = new ThreadInfo { Thread = thread, ProceedSignal = mres };
threads.Add(index, info); // index from 0 -> 10
}
else
{
ThreadInfo info = threads[index];
if (info.ProceedSignal.Wait(0))
{
// Thread dang chay, pause lai. (Event is signaled)
info.Signal.Reset();
}
else
{
// Thread đang dừng, resume. (Event is unsignaled)
info.ProceedSignal.Set();
// Change the button image here.
}
}
}
private class ThreadInfo
{
Thread Thread { get; set; }
ManualResetEvent Signal { get; set; }
}
}
Cái này là code "chay" fox viết trên này. Bạn đừng có copy paste rồi chạy ko được lại khóc nha. Cái này là gợi ý, bạn đã có keywords, hãy tự tìm hiểu tiếp. Có gì không hiểu thì lên đây mô tả"THẬT RÕ RÀNG", mình sẽ cố gắng giúp!
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...