我将尝试理解为什么一个
当我关闭它时,会调用
目前,我发现处理计时器的方法是执行
编辑
或者简单地做如下更改是否更好:
Windows.Forms.Timer
不会在创建它的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();
}
}
当我关闭它时,会调用
this.Dispose
,但计时器触发事件仍将继续被调用。我认为Dispose
会释放所有由已处理对象拥有的对象。这是不真实的吗?Timer
有特定的行为吗?目前,我发现处理计时器的方法是执行
timer.Tick -= OnTimer;
,然后在Form1_FormClosed
事件中调用它。这是个好解决方案还是应该采用其他方法?编辑
或者简单地做如下更改是否更好:
private void Form1_FormClosed(object sender, FormClosedEventArgs e) {
timer.Dispose();
this.Dispose();
}
?
IDisposable
ж–№жі•Dispose
дёӯеӨ„зҗҶиө„жәҗйҮҠж”ҫпјҢиҖҢдёҚжҳҜеңЁFormClosing
дёӯгҖӮ - Oskar KjellinFormClosing
事件中,您应该停止计时器timer.Enabled = false;
然后timer.Dispose(); timer = null;
- Marcotimer.Dispose();
时,timer.Enabled = false;
和timer = null;
的作用是什么?难道Dispose()
不会处理所有的事情吗? - Otieltimer.Dispose()
,稍后尝试访问 timer,则会出现异常;因此,如果你知道某个对象可能已被删除,可以检查if (timer != null) ...
但是如果你刚刚释放了它,这个条件会是假的,那么在执行代码时就会出现异常。因此,最好同时进行释放和赋值为 null,以确保在代码中在对象被释放之后就不再使用它。 - Marco