Bạn sẽ hủy đăng ký sự kiện trong một số UserControl
ở đâu? Tôi đăng ký với nó trong sự kiện Load
, như tôi đã làm trong các biểu mẫu. Và trong các biểu mẫu tôi thường sẽ hủy đăng ký trong sự kiện Closing
, nhưng tôi không thể tìm thấy bất kỳ điều gì tương tự trong số UserControl
...Nơi hủy đăng ký sự kiện trong một UserFind WinForms
Trả lời
Có cần thiết phải hủy đăng ký không? Là một tham chiếu đến kiểm soát người dùng được tổ chức sau khi nó đã được dỡ xuống? Nếu không, bạn không cần phải lo lắng về các trình xử lý sự kiện bởi vì ngay sau khi điều khiển người dùng bị xóa khỏi bộ nhớ, thì các trình xử lý sự kiện cũng được. Bạn không bị rò rỉ tài liệu tham khảo theo cách đó.
Như những người khác đã nói là có thực sự cần phải hủy đăng ký trong kịch bản của bạn?
Nếu bạn thực sự cần phải huỷ đăng ký tuy nhiên bạn làm điều đó một cách chính xác điều ngược lại của việc đăng ký:
UserControl1.Click -= new EventHandler(UserControl1_Click);
Nhưng tôi sẽ làm ở đâu? – Svish
Có là lần khi bạn muốn thực hiện điều này (ví dụ, khi sử dụng CAB).
Để hoàn chỉnh, câu trả lời cho câu hỏi của bạn là:
protected override void OnCreateControl()
{
base.OnCreateControl();
if(!DesignMode) //only time this.ParentForm should be null
this.ParentForm.FormClosing += ParentForm_FormClosing;
}
private void ParentForm_FormClosing(object sender, FormClosingEventArgs e)
{
//Unregister events here
}
Bạn cũng có thể ghi đè lên Dispose()
Sự cố mà kiểm soát này không có tham chiếu đến cả biểu mẫu gốc hoặc cấp độ gốc. –
- 1. Sự kiện C# đăng ký và hủy đăng ký trùng lặp
- 2. Sự kiện .NET - chặn người đăng ký đăng ký một sự kiện
- 3. Sự kiện đăng ký trong VB.NET
- 4. Đăng ký sự kiện bên trong một hàm tạo?
- 5. Loại bỏ - Hủy sự kiện thay đổi?
- 6. View.onTouchEvent chỉ đăng ký sự kiện ACTION_DOWN
- 7. Hủy đăng ký một LocationListener từ LocationManager
- 8. C# Đăng ký sự kiện động
- 9. Làm cách nào để hủy đăng ký khỏi sự kiện sử dụng biểu thức lambda?
- 10. Tránh đăng ký sự kiện trùng lặp trong C#
- 11. Điều khiển người dùng được nạp động với Trình xử lý sự kiện - Hủy đăng ký
- 12. Tôi có phải hủy đăng ký tất cả các trình xử lý sự kiện không?
- 13. Làm cách nào để hủy đăng ký sự kiện .NET này?
- 14. Có xấu khi không hủy đăng ký trình xử lý sự kiện không?
- 15. Sự kiện định tuyến tùy chỉnh WPF - Cách hủy đăng ký?
- 16. Nhiều Chủ đề đăng ký cùng một sự kiện
- 17. Vòng đời sự kiện WinForms
- 18. Sự kiện FOSUserBundle Symfony2 về đăng ký và đăng nhập
- 19. Có thể đăng ký các đăng ký sự kiện trong C# không?
- 20. Đăng ký sự kiện khi tạo đối tượng trong C#
- 21. Cách đăng ký sự kiện ngủ trong Android?
- 22. Hủy bỏ ListBox SelectedIndexThay đổi sự kiện
- 23. Android - Khi nào cần đăng ký/Hủy đăng ký người nhận phát sóng được tạo trong một hoạt động?
- 24. Sự kiện không đăng ký sau khi thay thếWith
- 25. C# Làm thế nào để hủy đăng ký tất cả các trình xử lý sự kiện từ một sự kiện cụ thể?
- 26. Prism Hủy đăng ký với mã thông báo đăng ký không hoạt động
- 27. Một đại biểu ẩn danh có thể tự hủy đăng ký khỏi sự kiện khi sự kiện đã được kích hoạt không?
- 28. Cách xác định xem một sự kiện đã được đăng ký
- 29. Hủy sự kiện onBlur trong JavaScript?
- 30. Khi nào cần hủy các sự kiện trong Silverlight
Vì vậy, nếu UserControl đang nghe cái gì đó, và UserControl đi ra khỏi phạm vi, sau đó xử lý sự kiện biến mất và UserControl sẽ được thu thập như nó cần. Trong khi nếu một cái gì đó đi ra khỏi phạm vi, nó sẽ không được thu thập cho đến khi một trong hai UserControl hủy đăng ký hoặc đi ra khỏi phạm vi chính nó. Tôi có đúng không? – Svish
@Svish: Không. Nếu UserControl đang nghe một cái gì đó, và UserControl đi ra khỏi phạm vi, UserControl sẽ ** không ** được thu thập, như cái gì đó vẫn giữ một tham chiếu đến UserControl. Tôi Một cái gì đó đi ra khỏi phạm vi và UserControl không giữ một tham chiếu đến nó, Cái gì đó sẽ được thu thập. – dtb
Vì vậy, nói cách khác, nếu một cái gì đó sẽ tồn tại sau khi UserControl chết, tôi sẽ phải hủy đăng ký để UserControl được thu thập? – Svish