/// <summary> /// 自动更新 /// </summary> void AutoUpdate() { Action autoUpdate = () => { if (!Settings.Default.AutoUpdate) { return; } if (!this.NetworkAvailable) { return; } using (var query = new QueryServiceClient()) { try { newVersion = query.GetProductLatestVersion(Resources.ProductId); if (string.Compare(Settings.Default.SkipVersion, newVersion) >= 0) { return; } this.CheckUpdate(); } catch (SocketException ex) { //网络连接失败 if (ex.ErrorCode == 10060) { return; } } catch (Exception ex) { } } }; autoUpdate.BeginInvoke(ar => autoUpdate.EndInvoke(ar as IAsyncResult), autoUpdate); }
public void CheckUpdate() { Action checkUpdate = () => { try { this.ProgressBarValue = 0; this.OperationDesc = "正在检查网络…"; if (!this.NetworkAvailable) { this.OperationDesc = "网络不可用"; return; } if (!this.NetworkAvailable) { return; } string ip = ConfigurationManager.AppSettings["supportHost"]; bool netsuc = false; try { PingReply reply = new Ping().Send(ip); if (reply.Status == IPStatus.Success) { netsuc = true; } } catch { netsuc = false; } if (!netsuc) { return; } using (var query = new QueryServiceClient()) { this.OperationDesc = "正在检索新版本…"; newVersion = string.IsNullOrWhiteSpace(newVersion) ? query.GetProductLatestVersion(Resources.ProductId) : newVersion; this.ProgressBarValue += 10; if (string.Compare(Assembly.GetEntryAssembly().GetName().Version.ToString(), newVersion) >= 0) { this.ProgressBarValue = 100; this.OperationDesc = "已是最新版本"; return; } this.UIDispatcher.Invoke(new Action(() => { CheckUpdateWindow win = new CheckUpdateWindow(newVersion) { Owner = Application.Current.MainWindow }; if (win.ShowDialog() != true) { this.ProgressBarValue = 100; this.OperationDesc = string.Empty; return; } Action <string> download = Download; download.BeginInvoke(newVersion, ar => download.EndInvoke(ar as IAsyncResult), download); }), null); } } catch (Exception ex) { this.OperationDesc = string.Empty; this.HideProgress(); this.UIDispatcher.Invoke(new Action(() => MessageBox.Show(Application.Current.MainWindow, ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error)), null); } }; checkUpdate.BeginInvoke(ar => checkUpdate.EndInvoke(ar as IAsyncResult), checkUpdate); }