Я использую 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 не обрабатывает это событие?
Я давно использую подобные статические события и никогда не сталкивался с подобными проблемами