void CheckForUpdates() { if (updateCheckState != UpdateCheckState.Stopped) { return; } try { Thread thread = new Thread(ThreadProc_DoCheckForUpdates); thread.Start(); updateCheckState = UpdateCheckState.Checking; } catch { updateCheckResult = "~r~failed to check for updates"; } }
void ThreadProc_DoCheckForUpdates() { try { WebClient client = new WebClient(); client.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore); Stream stream = client.OpenRead(URL_VERSIONFILE); StreamReader reader = new StreamReader(stream); string latestVer = reader.ReadToEnd(); if (SCRIPT_VERSION == latestVer) { updateCheckResult = "~g~Speedometer is up to date"; } else { updateCheckResult = "~y~New version is available on gta5-mods.com"; } } catch { updateCheckResult = "~r~failed to check for updates"; } updateCheckState = UpdateCheckState.Checked; }
private void UpdateBadLinkLvItem(object sender, WatchTimerEventArgs arg) { if (!string.IsNullOrEmpty(CurrentBadLink)) //如果当前有执行任务,请记录到队列 { if (!CurrentBadLink.Equals(arg.Url)) { if (!BadLinkQue.ContainsKey(arg.Url)) { BadLinkQue.Add(arg.Url, arg); foreach (ListViewItem lvi in lv404links.Items) { if (lvi.SubItems[0].Text.Equals(arg.Url)) { lvi.SubItems[3].Text = "排队中"; lvi.BackColor = Color.Yellow; break; } } } } return; } else { //BadLinkQue.Clear(); //BadLinkQue.Add(arg.Url, arg); } foreach (ListViewItem lvi in lv404links.Items) { if (lvi.SubItems[0].Text.Equals(arg.Url))//&& lvi.SubItems[3].Text.Equals("空闲") { lvi.SubItems[4].Text = arg.UpdateTime.ToString(); string Content = ""; try { Content = LoadPageContent(arg.Url); } catch (Exception e) { BLL.EmailQueue.Instance.AddEmailToDB("发生严重的问题,页面不能访问", string.Format("检查死链模板页面不能访问:{0},检测时间:{1},详细情况:{2}", arg.Url, DateTime.Now, e.Message)); continue; } Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>"); MatchCollection mc = reg.Matches(Content); Uri baseUri = new Uri(arg.Url); List <string> urls = new List <string>(); foreach (Match m in mc) { Uri uriPage = new Uri(baseUri, m.Groups["url"].Value); string sUrl = uriPage.ToString(); //sUrl = XS.Core.WebUtils.UrlEncode(sUrl); urls.Add(sUrl); } List <string> NUrls = (from i in urls select i).Distinct().ToList(); if (NUrls.Count > 0) { lvi.SubItems[5].Text = string.Format("找到{0}个网址,正在检查...", NUrls.Count); lvi.SubItems[3].Text = "忙碌中"; lvi.BackColor = Color.Red; CurrentBadLink = arg.Url; foreach (string url in NUrls) //载入所有要检查的地址 { ListViewItem lvisub = new ListViewItem(); lvisub.BackColor = Color.PowderBlue; lvisub.SubItems[0].Text = string.Concat("--", url); lvisub.SubItems.Add(""); lvisub.SubItems.Add(""); lvisub.SubItems.Add("等待中"); lvisub.SubItems.Add(""); lvisub.SubItems.Add(""); lv404links.Items.Add(lvisub); } thThreadCheckLink = new Thread(() => { UpdateCheckState dlgUpdateCheckState = new UpdateCheckState(MtUpdateCheckState); int badnum = 0; int currentnum = 0; int countnum = NUrls.Count; foreach (string surl in NUrls) { //Thread.Sleep(1000); currentnum++; bool IsBadLink = false; string url = surl.Trim(); int istate = 0; string errinfo = string.Empty; if (IsToCheck(url)) { istate = WebUtils.ValidateUrl(url, out errinfo); if (istate != 200) { badnum++; IsBadLink = true; } } lv404links.Invoke(dlgUpdateCheckState, IsBadLink ? 1 : 0, currentnum, countnum, url, false, istate, errinfo); } lv404links.Invoke(dlgUpdateCheckState, badnum, currentnum, countnum, arg.Url, true, 0, ""); }); thThreadCheckLink.ApartmentState = ApartmentState.STA; thThreadCheckLink.Start(); } } } }
void OnTick(object sender, EventArgs e) { menuPool.ProcessMenus(); if (enableSaving) { bool isPausePressed = Function.Call <bool>(Hash.IS_DISABLED_CONTROL_JUST_PRESSED, 2, 199) || Function.Call <bool>(Hash.IS_DISABLED_CONTROL_JUST_PRESSED, 2, 200); // pause or pause alternate button if (isPausePressed) { SaveStats(); } } if (updateCheckState == UpdateCheckState.Checked) { updateCheckState = UpdateCheckState.Stopped; UI.Notify(updateCheckResult); } Player player = Game.Player; if (player != null && player.CanControlCharacter && player.IsAlive && player.Character != null) { // update and draw if (player.Character.IsInVehicle() || onfootSpeedo || Utils.IsPlayerRidingDeer(player.Character)) // conditions to draw speedo { // in veh or riding deer float speed = 0; if (player.Character.IsInVehicle()) { speed = player.Character.CurrentVehicle.Speed; } else if (onfootSpeedo || Utils.IsPlayerRidingDeer(player.Character)) { speed = GetSpeedFromPosChange(player.Character); } Update(speed); Draw(); wid_accTimer.Update(speed); wid_accTimer.Draw(); wid_maxSpeed.Update(speed); wid_maxSpeed.Draw(useMph); // update rainbow if (rainbowMode != 0) { rainbowTimeCounter += Game.LastFrameTime; if (rainbowTimeCounter > RAINBOW_FRAMETIME) { rainbowTimeCounter = 0; rainbowHueBp = (rainbowHueBp + (int)(1 * Math.Pow(2, rainbowMode - 1) * speed)) % 10000; speedText.Color = Utils.HSLA2RGBA((double)rainbowHueBp / 10000, 1, 0.5, forecolor.A / 255.0); } } } else { // not in veh, not riding deer if (wid_accTimer.State != AccelerationTimerState.Off) { wid_accTimer.Stop(); } if (wid_maxSpeed.State != MaxSpeedState.Off) { wid_maxSpeed.Stop(); } } } if (player != null && player.Character != null) { prevPos = Game.Player.Character.Position; } }