diff --git a/Netch/Controllers/Interface/Instance.cs b/Netch/Controllers/Interface/Instance.cs index 6b41bdf7..51800e23 100644 --- a/Netch/Controllers/Interface/Instance.cs +++ b/Netch/Controllers/Interface/Instance.cs @@ -7,7 +7,6 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; -using System.Timers; using Netch.Models; using Netch.Utils; @@ -105,7 +104,7 @@ namespace Netch.Controllers /// 主程序启动参数 /// 进程优先级 /// 是否成功启动 - protected bool StartInstanceAuto(string argument, ProcessPriorityClass priority = ProcessPriorityClass.RealTime) + protected bool StartInstanceAuto(string argument, ProcessPriorityClass priority = ProcessPriorityClass.Normal) { State = State.Starting; try @@ -128,14 +127,13 @@ namespace Netch.Controllers // 启动程序 Instance.Start(); - Instance.PriorityClass = priority; + if (priority != ProcessPriorityClass.Normal) + Instance.PriorityClass = priority; if (!RedirectStd || StartedKeywords.Count == 0) return true; // 启动日志重定向 Instance.BeginOutputReadLine(); Instance.BeginErrorReadLine(); - _writeStreamTimer = new System.Timers.Timer(300); _writeStreamTimer.Elapsed += SaveStreamTimerEvent; - _writeStreamTimer.AutoReset = true; _writeStreamTimer.Enabled = true; // 等待启动 for (var i = 0; i < 1000; i++) @@ -163,7 +161,7 @@ namespace Netch.Controllers } } - private static System.Timers.Timer _writeStreamTimer; + private static System.Timers.Timer _writeStreamTimer = new System.Timers.Timer(300) {AutoReset = true}; private void OnExited(object sender, EventArgs e) { diff --git a/Netch/Forms/MainForm.Control.cs b/Netch/Forms/MainForm.Control.cs index 866fa77a..5acbfac2 100644 --- a/Netch/Forms/MainForm.Control.cs +++ b/Netch/Forms/MainForm.Control.cs @@ -1,10 +1,8 @@ using System; using System.IO; -using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; -using Netch.Controllers; using Netch.Models; using Netch.Utils; @@ -79,7 +77,7 @@ namespace Netch.Forms if (Global.Settings.StartedTcping) { // 自动检测延迟 - await Task.Run(() => + _ = Task.Run(() => { while (State == State.Started) { diff --git a/Netch/Forms/MainForm.MenuStrip.cs b/Netch/Forms/MainForm.MenuStrip.cs index 1e75d258..b83f3404 100644 --- a/Netch/Forms/MainForm.MenuStrip.cs +++ b/Netch/Forms/MainForm.MenuStrip.cs @@ -87,6 +87,28 @@ namespace Netch.Forms Hide(); } + private async void ReloadModesToolStripMenuItem_Click(object sender, EventArgs e) + { + Enabled = false; + try + { + await Task.Run(() => + { + SaveConfigs(); + InitMode(); + }); + NotifyTip(i18N.Translate("Modes have been reload")); + } + catch (Exception) + { + // ignored + } + finally + { + Enabled = true; + } + } + #endregion #region 订阅 @@ -121,70 +143,80 @@ namespace Netch.Forms StatusText(i18N.Translate("Starting update subscription")); DisableItems(false); - if (Global.Settings.UseProxyToUpdateSubscription) + try { - var mode = new Models.Mode + if (Global.Settings.UseProxyToUpdateSubscription) { - Remark = "ProxyUpdate", - Type = 5 - }; - await _mainController.Start(ServerComboBox.SelectedItem as Models.Server, mode); - } + var mode = new Models.Mode + { + Remark = "ProxyUpdate", + Type = 5 + }; + await _mainController.Start(ServerComboBox.SelectedItem as Models.Server, mode); + } - var serverLock = new object(); + var serverLock = new object(); - await Task.WhenAll(Global.Settings.SubscribeLink.Select(async item => await Task.Run(async () => - { - try + await Task.WhenAll(Global.Settings.SubscribeLink.Select(async item => await Task.Run(async () => { - var request = WebUtil.CreateRequest(item.Link); - - if (!string.IsNullOrEmpty(item.UserAgent)) request.UserAgent = item.UserAgent; - if (Global.Settings.UseProxyToUpdateSubscription) - request.Proxy = new WebProxy($"http://127.0.0.1:{Global.Settings.HTTPLocalPort}"); - - var str = await WebUtil.DownloadStringAsync(request); - try { - str = ShareLink.URLSafeBase64Decode(str); - } - catch - { - // ignored - } + var request = WebUtil.CreateRequest(item.Link); - lock (serverLock) - { - Global.Settings.Server = Global.Settings.Server.Where(server => server.Group != item.Remark).ToList(); - var result = ShareLink.Parse(str); - if (result != null) + if (!string.IsNullOrEmpty(item.UserAgent)) request.UserAgent = item.UserAgent; + if (Global.Settings.UseProxyToUpdateSubscription) + request.Proxy = new WebProxy($"http://127.0.0.1:{Global.Settings.HTTPLocalPort}"); + + var str = await WebUtil.DownloadStringAsync(request); + + try { - foreach (var x in result) x.Group = item.Remark; + str = ShareLink.URLSafeBase64Decode(str); + } + catch + { + // ignored + } - Global.Settings.Server.AddRange(result); - NotifyTip(i18N.TranslateFormat("Update {1} server(s) from {0}", item.Remark, result.Count)); + lock (serverLock) + { + Global.Settings.Server = Global.Settings.Server.Where(server => server.Group != item.Remark).ToList(); + var result = ShareLink.Parse(str); + if (result != null) + { + foreach (var x in result) x.Group = item.Remark; + + Global.Settings.Server.AddRange(result); + NotifyTip(i18N.TranslateFormat("Update {1} server(s) from {0}", item.Remark, result.Count)); + } } } - } - catch (WebException e) - { - NotifyTip($"{i18N.TranslateFormat("Update servers error from {0}", item.Remark)}\n{e.Message}", info: false); - } - catch (Exception e) - { - Logging.Error(e.ToString()); - } - })).ToArray()); + catch (WebException e) + { + NotifyTip($"{i18N.TranslateFormat("Update servers error from {0}", item.Remark)}\n{e.Message}", info: false); + } + catch (Exception e) + { + Logging.Error(e.ToString()); + } + })).ToArray()); - Configuration.Save(); - await Task.Run(InitServer); - DisableItems(true); - StatusText(i18N.Translate("Subscription updated")); - - if (Global.Settings.UseProxyToUpdateSubscription) + Configuration.Save(); + await Task.Run(InitServer); + StatusText(i18N.Translate("Subscription updated")); + } + catch (Exception) { - await _mainController.Stop(); + // ignored + } + finally + { + if (Global.Settings.UseProxyToUpdateSubscription) + { + await _mainController.Stop(); + } + + DisableItems(true); } } @@ -199,38 +231,32 @@ namespace Netch.Forms private async void CleanDNSCacheToolStripMenuItem_Click(object sender, EventArgs e) { - await Task.Run(() => DNS.Cache.Clear()); - StatusText(i18N.Translate("DNS cache cleanup succeeded")); - } - - private void ReloadModesToolStripMenuItem_Click(object sender, EventArgs e) - { - Enabled = false; - SaveConfigs(); - Task.Run(() => + try { - InitMode(); - - NotifyTip(i18N.Translate("Modes have been reload")); - Enabled = true; - }); + await Task.Run(() => DNS.Cache.Clear()); + StatusText(i18N.Translate("DNS cache cleanup succeeded")); + } + catch (Exception) + { + // ignored + } } private void updateACLWithProxyToolStripMenuItem_Click(object sender, EventArgs e) { - UpdateACL(true, sender); + UpdateACL(true); } private void updateACLToolStripMenuItem_Click(object sender, EventArgs e) { - UpdateACL(false, sender); + UpdateACL(false); } - private async void UpdateACL(bool useProxy, object sender) + private async void UpdateACL(bool useProxy) { void DisableItems(bool v) { - ((ToolStripMenuItem) sender).Enabled = v; + UpdateACLToolStripMenuItem.Enabled = updateACLWithProxyToolStripMenuItem.Enabled = v; } if (useProxy && ServerComboBox.SelectedIndex == -1) @@ -241,20 +267,21 @@ namespace Netch.Forms DisableItems(false); - if (useProxy) - { - var mode = new Models.Mode - { - Remark = "ProxyUpdate", - Type = 5 - }; - State = State.Starting; - await _mainController.Start(ServerComboBox.SelectedItem as Models.Server, mode); - } NotifyTip(i18N.Translate("Updating in the background")); try { + if (useProxy) + { + var mode = new Models.Mode + { + Remark = "ProxyUpdate", + Type = 5 + }; + State = State.Starting; + await _mainController.Start(ServerComboBox.SelectedItem as Models.Server, mode); + } + var req = WebUtil.CreateRequest(Global.Settings.ACL); if (useProxy) req.Proxy = new WebProxy($"http://127.0.0.1:{Global.Settings.HTTPLocalPort}"); @@ -283,15 +310,15 @@ namespace Netch.Forms { Enabled = false; StatusText(i18N.Translate("Uninstalling NF Service")); - - var result = false; try { - await Task.Run(() => result = NFController.UninstallDriver()); - if (result) + await Task.Run(() => { - StatusText(i18N.Translate("Service has been uninstalled")); - } + if (NFController.UninstallDriver()) + { + StatusText(i18N.Translate("Service has been uninstalled")); + } + }); } finally { @@ -303,21 +330,24 @@ namespace Netch.Forms { StatusText(i18N.Translate("Reinstalling TUN/TAP driver")); Enabled = false; - await Task.Run(() => + try { - try + await Task.Run(() => { Configuration.deltapall(); Configuration.addtap(); - StatusText(i18N.Translate("Reinstall TUN/TAP driver successfully")); - } - catch - { - NotifyTip(i18N.Translate("Reinstall TUN/TAP driver failed"), info: false); - } - }); - State = State.Waiting; - Enabled = true; + }); + StatusText(i18N.Translate("Reinstall TUN/TAP driver successfully")); + } + catch + { + NotifyTip(i18N.Translate("Reinstall TUN/TAP driver failed"), info: false); + } + finally + { + State = State.Waiting; + Enabled = true; + } } #endregion