【发布时间】:2021-03-19 13:50:47
【问题描述】:
我在 WPF 的 NavigationWindow 中有一个页面。当我按下关闭按钮(X)时,我需要在页面关闭时执行一些代码。现在在我的代码隐藏中我有这个:
public partial class CompactLayout : Page
{
private readonly CompactLayoutViewModel _viewModel;
public CompactLayout()
{
InitializeComponent();
DataContext = _viewModel = new CompactLayoutViewModel();
Dispatcher.ShutdownStarted += OnShutdownStarted;
//instead of Dispatcher.ShutdownStarted I've also tried: this.Unloaded += OnShutdownStarted;
}
private void OnShutdownStarted(object sender, EventArgs e)
{
_viewModel.releaseServerViewModel();
}
}
在我的 ViewModel 构造函数中,我有一个名为 ImageUpdate 的事件处理程序(ClientProxy 是我引发事件的类):
ClientProxy.ImageUpdate += async (sender, args) => await ImageUpdateAsync(args.image,args.fps);
在 ViewModel 中声明ImageUpdateAsync:
private Task ImageUpdateAsync(byte[] img, int fps)
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
try
{
// things occurr
}
catch (Exception ex)
{
// things occurr v2
}
}));
return Task.CompletedTask;
}
在调用_viewModel.releaseServerViewModel 之前,我在ImageUpdateAsync 的调用Application.Current.Dispatcher.Invoke 中收到错误System.Windows.Application.Current.get returned null。如果我使用this.Unloaded += OnShutdownStarted 而不是Dispatcher.ShutdownStarted,则即使在OnShutdownStarted 执行之前也会发生错误。
如何修复此代码,以便在此错误发生之前卸载页面?
【问题讨论】: