问题1: 嗨,我想知道有没有办法可以处理或杀死调度程序计时器的对象 并创建一个同名的新对象?
Qurstion 2: 如果设置为Public
,我可以访问其他类中的调度程序计时器对象答案 0 :(得分:15)
timer.Stop()
来禁用或停止计时器。效果是一样的。是。我想你有这样的公共财产:
public DispatcherTimer MyTimer { get; private set; }
答案 1 :(得分:0)
添加来自Lubo的正确答案(并从其下面的评论中提出该主题):即使您无法处置 DispatcherTimer (很可能是因为它已连接到WPF的非托管部分/ UWP Dispatcher本身(与应用程序本身一样长寿),您仍然应该 取消订阅 。
说,如果您有某种方法( StartRefreshTimer ),您可以在其中初始化 DispatcherTimer 并开始监听其 Tick 事件:
private DispatcherTimer _refreshTimer = new DispatcherTimer() { Interval = TimeSpan.FromMinutes(1) };
private void StartRefreshTimer()
{
if (_refreshTimer != null)
{
_refreshTimer.Tick += OnTick; // subscribe to timer's ticks
_refreshTimer.Start(); // start timer
}
}
private void OnTick(object sender, object args)
{
// your custom OnTick logic
}
然后,您应该有一种方法可以停止计时器并取消其事件的订阅:
private void StopRefreshTimer()
{
if (_refreshTimer != null)
{
_refreshTimer.Stop(); // stop timer
_refreshTimer.Tick -= OnTick; // unsubscribe from timer's ticks
}
}
您应该确保在类超出范围时(例如,在卸载WPF / UWP control 或 ViewModel 时,调用此“ tear down”方法) )。如果不取消订阅计时器事件,则可能会由于外部作用域对计时器托管类的引用而导致内存泄漏。