我有一个倒计时视图模型,构造函数有一个while循环 .
public class CountDownTimerViewModel : ViewModelBase
{
private int duringTime = 100;
public CountDownTimerViewModel(IEventAggregator eventAggregator)
{
Task.Run(async () =>
{
while (0 < duringTime)
{
await Task.Delay(TimeSpan.FromSeconds(1));
DuringTime--;
if (DuringTime == 0)
eventAggregator.GetEvent<CountdownComplateEvent>().Publish();
}
});
}
}
我在视图页面数据上下文中使用它 .
public partial class CountDownTimerView : UserControl
{
public CountDownTimerView(IUnityContainer containerRegistry)
{
InitializeComponent();
Loaded += (o, s) => { DataContext = containerRegistry.Resolve <CountDownTimerViewModel>(); };
}
}
但是,当我从这个区域删除视图时,如下所示:
private void Action(bool state)
{
Application.Current.Dispatcher.Invoke(() =>
{
var region = regionManager.Regions["CoountdownRegion"];
var view = region.GetView(nameof(CountDownTimerView));
if (view != null)
region.Remove(view);
}
}
倒计时while循环不会停止 . 但我从区域删除了视图 . 所以我无法杀死视图模型对象 . 如何处理视图模型对象?
1 回答
您可以向视图模型添加一个mehtod,允许您实际停止任务:
...并在删除视图时停止它: