xem xét cặp này các chức năng trong C#:Bộ hẹn giờ này có được giải phóng khỏi bộ nhớ không?
void func1() {
DispatcherTimer tmr = new DispatcherTimer();
tmr.Interval = TimeSpan.FromSeconds(5);
tmr.Tick += func2;
tmr.Start();
}
void func2(object a, EventArgs b) {
// Called every 5 seconds once func1() is called
}
Sau khi gọi Func1() một lần, Func2() được gọi mỗi 5 giây từ đó trở đi, mặc dù tôi đã làm mất tài liệu tham khảo để đếm thời gian của tôi kể từ khi phạm vi của nó bị hạn chế tới func1(). Điều đó có nghĩa rằng bộ đếm thời gian rõ ràng là vẫn còn trong bộ nhớ, làm điều của nó, lâu sau khi func1() được gọi. Câu hỏi của tôi là, nếu tôi thêm điều này vào func2():
void func2(object a, EventArgs b) {
// Called every 5 seconds once func1() is called
((DispatcherTimer)a).Stop()
}
Bộ hẹn giờ có thể được thu thập ngay sau khi chương trình thoát hay không? Nếu nó vẫn còn trong bộ nhớ, làm thế nào tôi có thể đánh dấu nó cho bộ sưu tập bằng tay (hoặc làm một cái gì đó tương tự)?
Câu hỏi phụ mà tôi có (nếu bạn cảm thấy có xu hướng trả lời) là nếu Bộ hẹn giờ thông thường có hành vi giống hệt nhau trong trường hợp này hoặc nếu có sự khác biệt đáng kể tôi nên biết.
Cảm ơn!