Thực thi phương thức với WaitHandle
Bạn muốn thực thi một hay nhiều phương thức một cách tự động khi một đối tượng dẫn xuất từ lớp System.Threading.WaitHandle đi vào trạng thái signaled. Hãy tạo một thể hiện ủy nhiệm System.Threading.WaitOrTimerCallback tham chiếu đến phương thức cần thực thi. Sau đó, đăng ký thể hiện ủy nhiệm và đối tượng WaitHandle với thread-pool bằng phương thức tĩnh ThreadPool. RegisterWaitForSingleObject.
Bạn có thể sử dụng các lớp dẫn xuất từ WaitHandle để gọi thực thi một phương thức. Bằng phương thức RegisterWaitForSingleObject của lớp ThreadPool, bạn có thể đăng ký thể hiện ủy nhiệm WaitOrTimerCallback với thread-pool khi một đối tượng dẫn xuất từ WaitHandle đi vào trạng thái signaled. Bạn có thể cấu hình thread- pool để thực thi phương thức chỉ một lần hay tự động đăng ký lại phương thức mỗi khi WaitHandle đi vào trạng thái signaled. Nếu WaitHandle đã ở trạng thái signaled khi bạn gọi RegisterWaitForSingleObject, phương thức sẽ thực thi ngay lập tức. Phương thức Unregister của đối tượng System.Threading.RegisteredWaitHandle (được trả về bởi phương thức RegisterWaitForSingleObject) được sử dụng để hủy bỏ việc đăng ký.
Lớp thường được dùng làm bộ kích hoạt là AutoResetEvent, nó sẽ tự động chuyển sang trạng thái unsignaled sau khi ở trạng thái signaled. Tuy nhiên, bạn cũng có thể thay đổi trạng thái signaled theo ý muốn bằng lớp ManualResetEvent hay Mutex. Ví dụ dưới đây trình bày cách sử dụng một AutoResetEvent để kích hoạt thực thi một phương thức có tên là EventHandler.
- using System;
- using System.Threading;
- public class EventExecutionExample {
-
-
- private static void EventHandler(object state, bool timedout) {
-
-
-
- if (timedout) {
- Console.WriteLine("{0} : Wait timed out.", DateTime.Now.ToString("HH:mm:ss.ffff"));
- } else {
- Console.WriteLine("{0} : {1}",
- DateTime.Now.ToString("HH:mm:ss.ffff"), state);
- }
- }
- public static void Main() {
-
- AutoResetEvent autoEvent = new AutoResetEvent(false);
-
-
-
-
- WaitOrTimerCallback handler =new WaitOrTimerCallback(EventHandler);
-
-
-
- string state = "AutoResetEvent signaled.";
-
-
- RegisteredWaitHandle handle =ThreadPool.RegisterWaitForSingleObject(autoEvent, handler, state, 3000, false);
- Console.WriteLine("Press ENTER to signal the AutoResetEvent" +" or enter \"Cancel\" to unregister the wait operation.");
- while (Console.ReadLine().ToUpper() != "CANCEL") {
-
-
-
-
- autoEvent.Set();
- }
-
- Console.WriteLine("Unregistering wait operation.");
- handle.Unregister(null);
-
- Console.WriteLine("Main method complete. Press Enter.");
- Console.ReadLine();
- }
- }
[Nghean-Aptech st]
Các tin mới hơn:
Hướng dẫn tích hợp giao diện trang quản trị SB Admin 2 vào Laravel 5.8.
Hướng dẫn tích hợp Google ReCaptcha v2 vào Laravel bằng curl.
Học lập trình React JS trong vòng 5 phút.
Sử dụng trình soạn thảo CKeditor tích hợp CKFinder với Laravel.
Hướng dẫn cài đặt Apache, PHP, MySQL, PHPMyAdmin trên Windows 10 và cấu hình SendMail.
Các tin cũ hơn:
Gọi bất đồng bộ một phương thức web.
Tự động refresh trang aspx với JavaScript.
Làm ứng dụng Windows Form mở toàn màn hình.
Sử dụng parttial class trong .NET.
Chuyển trang .aspx thành Web User Control.