从System.Threading.Timer在UI中调用时如何避免泄漏句柄?
在使用System.Threading.Timer时,如果不正确地处理它,可能会导致内存泄漏。为了避免这种情况,请遵循以下步骤:
示例代码:
using System;
using System.Threading;
using System.Windows.Forms;
public class TimerExample : Form
{
private System.Threading.Timer timer;
private WeakReference<System.Threading.Timer> timerWeakRef;
public TimerExample()
{
timer = new System.Threading.Timer(OnTimerElapsed, null, 1000, 5000);
timerWeakRef = new WeakReference<System.Threading.Timer>(timer);
}
private void OnTimerElapsed(object state)
{
// 执行定时操作
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (timerWeakRef.TryGetTarget(out var target))
{
target.Dispose();
}
}
}
在这个示例中,我们使用了WeakReference来存储Timer实例,并在窗体关闭时取消订阅。这样可以确保在不再需要Timer时,它会被垃圾回收器回收,从而避免泄漏句柄。
领取专属 10元无门槛券
手把手带您无忧上云