2009-02-20 41 views
41

Tôi có một cửa sổ WPF mà tôi đang tạo từ một cửa sổ khác, hiển thị() ing, sau đó để cho nó đóng() chính nó. Khi cửa sổ đóng lại, tôi hy vọng nó sẽ chết, hãy gọi hàm khởi tạo của nó và xóa tất cả các phần tử con của nó (chẳng hạn như bộ tính giờ ..).Cách xử lý chính xác cửa sổ WPF là gì?

Cách chính xác để gọi hành động như vậy là gì?

Trả lời

52

Close() giải phóng tất cả các tài nguyên không được quản lý và đóng tất cả các tài sản thuộc sở hữu Window s.

Bất kỳ tài nguyên được quản lý nào khác mà bạn cần xử lý xác định sẽ được xử lý từ sự kiện Closed.

Reference

(lưu ý: xóa câu trả lời trước, đó là một dự đoán hoàn toàn sai)

+1

Lớp cửa sổ trong WPF không có phương thức Vứt bỏ()! –

+6

Có lẽ tôi nên đọc tài liệu trước? –

11

Có rất ít yếu tố WPF mà thực sự cần phải được xử lý một cách rõ ràng, không giống như trong Windows Forms.

Trong trường hợp Window, gọi Close() là đủ để vứt bỏ tất cả các tài nguyên được quản lý và không được quản lý ghi vào documentation.

+3

Tài liệu của tôi chỉ nói các tài nguyên không được quản lý được xử lý ... –

1

Đóng cửa sổ và tự tin rằng bạn đã giải phóng tất cả tài nguyên cho nó và bất kỳ con nào của nó sẽ khiến tất cả các yếu tố được xử lý tốt trong cây logic được thu gom rác.

Tôi nói "cư xử tốt" vì về mặt lý thuyết có thể có yếu tố tạo ra chuỗi không được dừng đúng cách, nhưng trong thực tế nếu bạn đang sử dụng khung công tác WPF cơ bản và các điều khiển bằng văn bản tốt, bạn nên được tốt để chỉ phát hành tất cả mọi thứ.

6

Chỉ trong trường hợp, tôi sẽ thêm hai xu của mình.

Vấn đề của tôi là tôi không thực hiện đủ khắc phục sự cố. cửa sổ của tôi là một cửa sổ con có thể được mở ra, đóng lại, và mở cửa trở lại, vì vậy tôi thêm vào phần sau đây để giữ cho nó khỏi đóng cửa hoàn toàn:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { 
    e.Cancel = true; 
    this.Hide(); 
} 

Tuy nhiên, khi window.close được gọi, nó chỉ giấu cửa sổ. Cuối cùng, tôi đã bắt đầu và thêm vào các nội dung sau:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { 
    e.Cancel = true; 
    this.Hide(); 
} 

public void Close() { 
    this.Closing -= Window_Closing; 
    //Add closing logic here. 
    base.Close(); 
} 

Điều này làm việc tốt - loại bỏ trình xử lý sự kiện ngăn cửa sổ đóng và đóng cửa sổ.

+0

Hah, tôi đã gặp lỗi chính xác (quên hủy đăng ký trình xử lý sự kiện gần) khi cố gắng đóng cửa sổ con. Đã lưu ngày của tôi :) – Nipheris

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