Tôi đã tìm kiếm câu trả lời cho vấn đề cụ thể của mình trong một thời gian không thành công.Đóng một biểu mẫu được tạo trong một chủ đề khác
Tôi có một nhiệm vụ trong chương trình của mình mất vài giây và tôi muốn hiển thị biểu mẫu mới trong khi tác vụ đó đang được thực hiện. Biểu mẫu mới có thanh tải và một số văn bản.
Tôi cần hiển thị biểu mẫu mới song song với tác vụ nếu không nhiệm vụ sẽ không bắt đầu cho đến khi tôi đóng biểu mẫu mới.
Đây là giải pháp tôi có bây giờ:
private void loadingBar()
{
frmLoading frm = new frmLoading("Please wait while the database is being backed up", "This might take several days.");
frm.ShowDialog();
}
public void Backup()
{
Thread load = new Thread(new ThreadStart(loadingBar));
load.Start();
///Execute a task.
load.Abort();
}
Vì vậy, công trình này OK nhưng câu hỏi của tôi là: Nó sẽ không thể tốt hơn để đóng hình thức "frm" trong tải thread để thực hiện nó dừng lại?
Coi nó như một thanh tiến trình hoạt động. Chạy "quá trình" làm chủ đề nền cho phù hợp với biểu mẫu bạn muốn hiển thị. Sau đó gọi biểu mẫu đó từ chuỗi "Main". Các chủ đề chính sẽ khóa với hình thức tải của bạn hiển thị, trong khi các hình thức tải chạy một cái gì đó như là một sợi nền. Bằng cách đó, hình thức tải chính nó có thể theo dõi quá trình và đóng chính nó khi nó kết thúc. – Nevyn
@Dave Tại sao không chỉ sử dụng 'backgroundWorker'? Ngoài ra - Bạn có thể muốn xem xét việc đặt mã đó cho Chủ đề trong câu lệnh 'Using()', điều này sau đó sẽ tự hủy bỏ khi hoàn thành. – Hexie
Điều này về cơ bản là điều sai trái phải làm. Có một số chế độ thất bại rất khó chịu để hiển thị giao diện người dùng trên một chuỗi công nhân.Bạn cần phải làm điều này theo cách khác xung quanh, hiển thị cửa sổ "tải" trên luồng giao diện người dùng, thực hiện sao lưu trên một chuỗi công nhân. –