【问题标题】:Application.Current returning null before shutdownApplication.Current 在关机前返回 null
【发布时间】: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 执行之前也会发生错误。

如何修复此代码,以便在此错误发生之前卸载页面?

【问题讨论】:

    标签: c# .net wpf .net-5


    【解决方案1】:
    class ViewModel
    {
      private readonly Dispatcher _dispatcher = Application.Current.Dispatcher;
    
      private Task ImageUpdateAsync(byte[] img, int fps)
      {
        _dispatcher.Invoke(() => {/*...*/});
        return Task.CompletedTask;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多