问题1:您好,我想知道有没有一种方法可以处理或杀死DispatcherTimer的对象并创建一个同名的新对象?
问题 2:如果DispatcherTimer对象设置为 Public,我可以访问其他类中的对象吗?
问题1:您好,我想知道有没有一种方法可以处理或杀死DispatcherTimer的对象并创建一个同名的新对象?
问题 2:如果DispatcherTimer对象设置为 Public,我可以访问其他类中的对象吗?
timer.Stop()
。效果是一样的。是的。我想你有这样的公共财产:
public DispatcherTimer MyTimer { get; private set; }
添加来自 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控件或ViewModel被卸载时),你应该确保调用这个“tear down”方法。如果您不取消订阅计时器事件,您最终可能会因从外部范围引用到您的计时器托管类而导致内存泄漏。