Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    [Help] - Pause/Resume multi-thread trong winform

    Chào mọi người,

    Mình đang làm thử cái app winform vướng chút chổ multi-thread nhờ mọi người chỉ giáo với ạ

    Em có 1 main thread (ko cần để ý main làm gì). Trong main e sinh ra 10 thread (thực hiện 1method nào đó).
    Em có 2 nút PAUSE và RESUME mục đích để PAUSE và RESUME 10 thread đó. Em phải làm thế nào ạ? Đoạn PAUSE và RESUME 10thread đang chạy á?
    Em thấy có hàm Thread.Suspend và Thread.Resume nhưng giờ 2 hàm đó bị bỏ rồi, ko còn dùng đc.

    Cám ơn mọi người nhiều,

    - - - Nội dung đã được cập nhật ngày 18-05-2016 lúc 10:19 AM - - -

    Ai đó giúp em với ạ?

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi trungdau
    Chào mọi người,

    Mình đang làm thử cái app winform vướng chút chổ multi-thread nhờ mọi người chỉ giáo với ạ

    Em có 1 main thread (ko cần để ý main làm gì). Trong main e sinh ra 10 thread (thực hiện 1method nào đó).
    Em có 2 nút PAUSE và RESUME mục đích để PAUSE và RESUME 10 thread đó. Em phải làm thế nào ạ? Đoạn PAUSE và RESUME 10thread đang chạy á?
    Em thấy có hàm Thread.Suspend và Thread.Resume nhưng giờ 2 hàm đó bị bỏ rồi, ko còn dùng đc.

    Cám ơn mọi người nhiều,

    - - - Nội dung đã được cập nhật ngày 18-05-2016 lúc 10:19 AM - - -

    Ai đó giúp em với ạ?
    Bị bỏ rồi ?
    //
    Thông thường hệ thống không bỏ, nó chỉ khuyến cáo nó lỗi thời.

    Trong vài chương trình tôi vẫn thấy nó mà !

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    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!

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trong smartAssembly version 6.8 / 6.9 vẫn dùng Pause/Resume

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •