I am trying to understand why a Windows.Forms.Timer
is not disposed when the form
that created it is. I have this simple form:
public partial class Form1 : Form {
private System.Windows.Forms.Timer timer;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(OnTimer);
timer.Enabled = true;
}
private void OnTimer(Object source, EventArgs e) {
Debug.WriteLine("OnTimer entered");
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e) {
this.Dispose();
}
}
When I close it, this.Dispose
is called but the timer firing event continues to be called. I thought that the Dispose
was freeing all objects owned by the disposed object. Is that untrue? Does Timer
have a specific behavior?
For now, I found that the way to dispose of the timer is to do timer.Tick -= OnTimer;
- I call it then in the Form1_FormClosed
event. Is it the good solution or should I do otherwise?
EDIT
Or is it simply better to do:
private void Form1_FormClosed(object sender, FormClosedEventArgs e) {
timer.Dispose();
this.Dispose();
}
?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…