public MainWindow()

in JetBrains.Etw.HostService.Updater/src/Views/MainWindow.xaml.cs [21:68]


    public MainWindow([NotNull] ILogger logger, [NotNull] Options options)
    {
      if (options == null) throw new ArgumentNullException(nameof(options));
      myLogger = logger ?? throw new ArgumentNullException(nameof(logger));

      myDownloadDelay = options.CheckInterval != null;

      var loggerContext = Logger.Context;
      var anonymousPermanentUserId = new AnonymousPermanentUserIdAccessor(logger);

      void CheckForUpdate()
      {
        try
        {
          var installedVersion = options.CheckForVersion ?? VersionControl.GetInstalledVersion(logger);
          var updateRequest = installedVersion != null ? UpdateChecker.Check(logger, options.BaseUri ?? UpdateChecker.PublicBaseUri, "EHS", installedVersion, anonymousPermanentUserId.GetOrGenerate()) : null;

          Interlocked.Exchange(ref myUpdateRequest, updateRequest);
          myViewModel.SetUpdateRequest(updateRequest);
          if (updateRequest == null)
          {
            logger.Info($"{loggerContext} res=exit_no_update");
            Application.Current.Shutdown();
          }
        }
        catch (Exception e)
        {
          logger.Exception(e);
          logger.Info($"{loggerContext} res=exit_exception");
          Application.Current.Shutdown();
        }

      }

      CheckForUpdate();

      // Note(ww898): Prevent blinking the tray icon!!!
      if (myUpdateRequest == null)
        return;

      InitializeComponent();
      DataContext = myViewModel;

      var timer = new DispatcherTimer {Interval = options.CheckInterval ?? UpdateChecker.DefaultCheckInterval};
      timer.Tick += (_, _) => CheckForUpdate();
      Closed += (_, _) => timer.Stop();
      timer.Start();
    }