2009-06-17 26 views
8

Tôi đang cố gắng tìm cách tạo chức năng Biểu mẫu mà tôi muốn sử dụng C#.Đóng hộp thoại phương thức từ chủ đề bên ngoài - C#

Về cơ bản, tôi muốn có một hộp thoại phương thức có khoảng thời gian chờ được chỉ định. Có vẻ như việc này rất dễ làm, nhưng tôi không thể làm cho nó hoạt động được.

Khi tôi gọi số this.ShowDialog(parent), luồng chương trình sẽ dừng và tôi không có cách nào để đóng hộp thoại mà trước tiên không có người dùng nhấp vào nút.

Tôi đã thử tạo một chuỗi mới bằng cách sử dụng lớp BackgroundWorker, nhưng tôi không thể làm cho nó đóng hộp thoại trên một chuỗi khác.

Tôi có thiếu điều gì đó hiển nhiên ở đây không?

Cảm ơn bạn đã có bất kỳ thông tin chi tiết nào bạn có thể cung cấp.

Trả lời

11

Sử dụng một System.Windows.Forms.Timer. Đặt thuộc tính Interval làm thời gian chờ của bạn và trình xử lý sự kiện Tick để đóng hộp thoại.

partial class TimedModalForm : Form 
{ 
    private Timer timer; 

    public TimedModalForm() 
    { 
     InitializeComponent(); 

     timer = new Timer(); 
     timer.Interval = 3000; 
     timer.Tick += CloseForm; 
     timer.Start(); 
    } 

    private void CloseForm(object sender, EventArgs e) 
    { 
     timer.Stop(); 
     timer.Dispose(); 
     this.DialogResult = DialogResult.OK; 
    } 
} 

Bộ hẹn giờ chạy trên chuỗi giao diện người dùng để an toàn đóng biểu mẫu từ trình xử lý sự kiện đánh dấu.

1

bạn có thể Invoke đóng cửa từ chủ đề nền của bạn

11

Bạn sẽ cần phải gọi phương thức Close trên các chủ đề đã tạo ra các hình thức:

theDialogForm.BeginInvoke(new MethodInvoker(Close)); 
3

Nếu bạn thực sự chỉ muốn một hộp thoại phương thức thì tôi thấy đây là giải pháp tốt nhất cho đến nay: http://www.codeproject.com/KB/miscctrl/CsMsgBoxTimeOut.aspx (đọc phần nhận xét để sửa đổi nhỏ).

Nếu bạn muốn hiển thị biểu mẫu của riêng mình một cách bình thường, thì giải pháp từ adrianbanks là tốt nhất.

Các vấn đề liên quan