Почему MainWindow не обрабатывает статическое событие App.xaml.cs? - PullRequest
0 голосов
/ 27 апреля 2018

Я использую Squirrel для установки и обновления, поэтому в своем App.xaml.cs я обрабатываю пользовательские события Squirrel

App.xaml.cs

public static event EventHandler ApplicationUpdated;
protected virtual void OnApplicationUpdated()
{
   ApplicationUpdated?.Invoke(this, EventArgs.Empty);
}

protected override void OnStartup(StartupEventArgs e)
{
  base.OnStartup(e);
  try
  {
      using (var mgr = new UpdateManager(updateUrl))
      {
          SquirrelAwareApp.HandleEvents(
            onInitialInstall: OnInitialInstall,
            onAppUpdate: OnApplicationUpdate,
            onAppUninstall: OnApplicationUninstall,
            onFirstRun: OnFirstRun);
      }
  }
  catch (Exception ex)
  { }
}

private void OnApplicationUpdate(Version version)
{
  using (var manager = new UpdateManager(updateUrl))
  {
      manager.CreateShortcutsForExecutable(appFullName, ShortcutLocation.Desktop, true);
      manager.CreateShortcutsForExecutable(appFullName, ShortcutLocation.StartMenu, true);
      manager.CreateShortcutsForExecutable(appFullName, ShortcutLocation.AppRoot, true);

      manager.RemoveUninstallerRegistryEntry();
      manager.CreateUninstallerRegistryEntry();
  }

  System.Windows.Forms.MessageBox.Show("OnApplicationUpdated"); // this mbox is showing up normally
  OnApplicationUpdated(); // here is where I fire event that notifies (or at least should notify) MainWindow about update
}

Процесс обновления и все остальное (OnInitiallInstall и т. Д.) Работает правильно, но когда я пытаюсь запустить OnApplicationUpdated (это может немного сбивать с толку - это мое собственное статическое событие), он не срабатывает (?) Или MainWindow не обрабатывает это правильно, потому что метод не записывает одну строку в выводе и не изменяет какое-либо свойство элементов управления

MainWindow.xaml.cs

public MainWindow()
{
   // some code above

   App.ApplicationUpdated += App_ApplicationUpdated;

   // some code under
}

private void App_ApplicationUpdated(object sender, EventArgs e)
{
    Console.WriteLine("ApplicationUpdated");
    Dispatcher.Invoke(() => 
    {
        updateLabel.Visibility = Visibility.Collapsed;
        updateButton.Visibility = Visibility.Collapsed;
        updateProgressRing.Visibility = Visibility.Collapsed;

        restartButton.Visibility = Visibility.Visible;
    });
}

Не могли бы вы сказать мне, почему это происходит, почему MainWindow не обрабатывает это событие?

Я давно использую подобные статические события и никогда не сталкивался с подобными проблемами

...