internal static async void CheckForUpdates(bool silent) { var hc = new HttpClient(); try { var currentVersion = Assembly.GetExecutingAssembly().GetName().Version; var uri = new Uri("http://wordslive.org/version.xml"); var str = await hc.GetStringAsync(uri); var reader = new StringReader(str); var doc = XDocument.Load(reader); var latestVersion = new Version(doc.Root.Element("version").Value); var noUpdateVersion = new Version(Properties.Settings.Default.NoUpdateVersion); var latestUri = new Uri(doc.Root.Element("url").Value); if (currentVersion >= latestVersion) { if (!silent) { MessageBox.Show(instance.window, Resource.updMsgUpToDate, ""); } } else if (!silent || noUpdateVersion < latestVersion) { var result = MessageBox.Show(instance.window, String.Format(Resource.updMsgNewVersion, latestVersion.SimplifyVersion().ToString()), "", MessageBoxButton.YesNoCancel); if (result == MessageBoxResult.Yes) { // open download in browser and don't show update alert again latestUri.OpenInBrowser(); Properties.Settings.Default.NoUpdateVersion = latestVersion.ToString(); } else if (result == MessageBoxResult.No) { // don't show update alert again (until newer version is available) Properties.Settings.Default.NoUpdateVersion = latestVersion.ToString(); } } } catch (Exception) { if (!silent) { MessageBox.Show(instance.window, Resource.updMsgFailed, "", MessageBoxButton.OK, MessageBoxImage.Error); } } }