Hiển thị các bài đăng có nhãn C#. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn C#. Hiển thị tất cả bài đăng

Thứ Ba, 31 tháng 10, 2023

Truyền biến giữa hai Form trong ứng dụng Windows Forms

Để truyền biến giữa hai form trong ứng dụng Windows Forms, bạn có một số cách khác nhau, tùy thuộc vào mức độ sự liên quan giữa các form và cách bạn muốn chia sẻ dữ liệu. Dưới đây là một số cách phổ biến để truyền biến giữa hai form:

  1. 1. Sử dụng thuộc tính hoặc phương thức: Bạn có thể tạo các thuộc tính hoặc phương thức public trong form nguồn để cung cấp dữ liệu cho form đích. Ví dụ:

    Trong Form nguồn:

    csharp
    public string DataToPass { get; set; } private void OpenSecondForm() { SecondForm secondForm = new SecondForm(); secondForm.DataFromFirstForm = this.DataToPass; secondForm.Show(); }

    Trong Form đích:

    csharp
    public string DataFromFirstForm { get; set; }

  2. 2. Sử dụng constructor: Trong constructor của form đích, bạn có thể truyền dữ liệu khi tạo form đó. Ví dụ:

    Trong Form đích:

    csharp
    public SecondForm(string data) { InitializeComponent(); // Sử dụng dữ liệu ở đây }

    Trong Form nguồn:

    csharp
    private void OpenSecondForm() { string dataToPass = "Dữ liệu bạn muốn truyền"; SecondForm secondForm = new SecondForm(dataToPass); secondForm.Show(); }

  3. 3. Sử dụng sự kiện và delegat (Event and Delegate): Bạn có thể tạo sự kiện và delegat trong form nguồn và đăng ký sự kiện đó từ form đích. Khi dữ liệu thay đổi trong form nguồn, form đích sẽ được thông báo thông qua sự kiện.

    Trong Form nguồn:

    csharp
    public event Action<string> DataChanged; private void SomeAction() { string newData = "Dữ liệu mới"; DataChanged?.Invoke(newData); }

    Trong Form đích:

    csharp
    private void SubscribeToDataChangedEvent() { FirstForm firstForm = new FirstForm(); firstForm.DataChanged += OnDataChanged; firstForm.Show(); } private void OnDataChanged(string newData) { // Xử lý dữ liệu ở đây }

Cách bạn chọn phụ thuộc vào cấu trúc ứng dụng của bạn và cách bạn muốn truyền dữ liệu.

Thứ Năm, 18 tháng 5, 2023

Thực thi tác vụ trong một khoảng thời gian quy định

Để thực hiện một hàm trong một khoảng thời gian quy định và ngừng nếu quá thời gian, bạn có thể sử dụng đối tượng CancellationTokenSource và Task trong C#. Dưới đây là một ví dụ minh họa:

csharp
using System; using System.Threading; using System.Threading.Tasks; public class Program { public static void Main() { CancellationTokenSource cts = new CancellationTokenSource(); TimeSpan duration = TimeSpan.FromHours(3); // Bắt đầu thực hiện hàm A trong 3 giờ Task task = Task.Run(() => FunctionA(cts.Token), cts.Token); // Chờ trong 3 giờ bool completed = task.Wait(duration); // Kiểm tra xem hàm đã hoàn thành hay chưa if (completed) { Console.WriteLine("Hàm A đã hoàn thành trong thời gian quy định."); } else { // Nếu hàm chưa hoàn thành, hủy tác vụ và thông báo hết giờ cts.Cancel(); Console.WriteLine("Hết giờ quy định, hàm A đã bị dừng."); } } public static void FunctionA(CancellationToken cancellationToken) { // Ví dụ: Thực hiện một công việc lặp đi lặp lại trong hàm A while (!cancellationToken.IsCancellationRequested) { // Thực hiện công việc Console.WriteLine("Đang thực hiện công việc A..."); // Ngừng một khoảng thời gian trước khi tiếp tục Task.Delay(TimeSpan.FromSeconds(1)).Wait(); } } }

Trong ví dụ trên, chúng ta sử dụng CancellationTokenSource để tạo ra một CancellationToken để có thể hủy bỏ thực thi của hàm A. Task.Run được sử dụng để chạy hàm A trong một luồng riêng biệt. Bằng cách sử dụng Task.Wait, chúng ta chờ đợi trong một khoảng thời gian quy định (3 giờ). Nếu hàm A hoàn thành trong thời gian quy định, chúng ta sẽ nhận được thông báo "Hàm A đã hoàn thành trong thời gian quy định". Nếu hàm A không hoàn thành trong thời gian quy định, chúng ta sẽ hủy bỏ tác vụ và nhận được thông báo "Hết giờ quy định, hàm A đã bị dừng".


Lưu ý rằng trong hàm A, chúng ta cần kiểm tra cancellationToken.IsCancellationRequested để kiểm tra xem có yêu cầu hủy bỏ thực thi hay không. Trường hợp này cho phép chúng ta thoát khỏi vòng lặp và dừng thực hiện công việc.