30/09/2018, 19:28

Hỏi về lỗi delay đóng cửa sổ (C# WPF)

Mình có đoạn code:

private void button_Click(object sender, RoutedEventArgs e)
    {
        System.Timers.Timer asd = new System.Timers.Timer(6000);
        asd.Elapsed += new System.Timers.ElapsedEventHandler(asdasd);
        asd.Start();
        
    }
    private void asdasd(object sender, System.Timers.ElapsedEventArgs e)
    {
        this.Close();
        MessageBox.Show("đã đóng cửa sổ");
    }

Mục đích của nó là: Khi click vào button thì sau 6 giây cửa sổ MainWindow sẽ đóng lại
và xuất hiện 1 MessageBox với dong chữ “đã đóng cửa sổ”.

Nhưng đến dòng this.Close(); thì nó báo lỗi:

An exception of type ‘System.InvalidOperationException’ occurred in WindowsBase.dll but was not handled in user code

Có ai biết thì giúp mình với ạ. hoặc có cách nào hay hơn cũng đc.

Văn Dương viết 21:31 ngày 30/09/2018

Cách này :

[code]
private void button_Click(object sender, RoutedEventArgs e) {
System.Threading.Thread.Sleep(6000); // delay 6s
Close(); // Close Window
}

protected override void onClosed(EventAgrs e){ // event when window closed
System.Windows.MessageBox.Show(“Đã đóng cửa sổ !”);
base.Closed(e);
}
.[/code]

Thái Hoàng viết 21:39 ngày 30/09/2018

Cám ơn bạn. Ý mình muốn là đưa sự kiện đếm giây vào 1 tiến trình riêng (giống như kiểu sài Task ý) để khi nó đang thực hiện thì chương trình vẫn chạy bt.
Như bạn thì đoạn chạy cái sleep(6000) cửa sổ nó sẽ bị đơ. ko xử lý những cái khác đc.

Văn Dương viết 21:34 ngày 30/09/2018

Khi bạn click close rồi bạn còn muốn thao tác gì nữa mà còn sợ gui đơ ??
Còn muốn lm đc việc đó có thể dùng timer, thread,…

Thái Hoàng viết 21:30 ngày 30/09/2018

thank bạn nha. mình làm đc rồi

Bài liên quan
0