c# - Application.Current 在关机前返回 null
问题描述
我在 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);
ImageUpdateAsync
ViewModel 中的声明:
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;
}
我在调用之前的调用中收到错误System.Windows.Application.Current.get returned null。如果不是我甚至在执行之前使用错误发生。Application.Current.Dispatcher.Invoke
ImageUpdateAsync
_viewModel.releaseServerViewModel
Dispatcher.ShutdownStarted
this.Unloaded += OnShutdownStarted
OnShutdownStarted
如何修复此代码,以便在此错误发生之前卸载页面?
解决方案
class ViewModel
{
private readonly Dispatcher _dispatcher = Application.Current.Dispatcher;
private Task ImageUpdateAsync(byte[] img, int fps)
{
_dispatcher.Invoke(() => {/*...*/});
return Task.CompletedTask;
}
}
推荐阅读
- visual-studio-code - 我如何在 Visual Studio 中运行 python 代码来创建 GCP bigquery 数据集
- swift - 限制列表中的 API 请求
- node.js - React App 无法启动并给出错误
- java - 如何使用 appium 从内部存储中获取文件列表
- java - Spring Boot App 无法连接到 PostgreSQL 容器
- r - 从变量中整理信息
- python - Python csv 列表
- spring-boot - 线程“OkHttp Dispatcher”中的异常 java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)
- javascript - 输入字段的 API 参考函数
- android - Android - 如何解决“错误膨胀类(在 DexPathList 上找不到类)”?