diff --git a/v2rayN/v2rayN/Forms/MainForm.cs b/v2rayN/v2rayN/Forms/MainForm.cs
index 3a5c1d69..0b2c9756 100644
--- a/v2rayN/v2rayN/Forms/MainForm.cs
+++ b/v2rayN/v2rayN/Forms/MainForm.cs
@@ -34,14 +34,7 @@ namespace v2rayN.Forms
Application.ApplicationExit += (sender, args) =>
{
- v2rayHandler.V2rayStop();
-
- HttpProxyHandle.CloseHttpAgent(config);
- PACServerHandle.Stop();
-
- ConfigHandler.SaveConfig(ref config);
- statistics?.SaveToFile();
- statistics?.Close();
+ Closes();
};
}
@@ -347,6 +340,7 @@ namespace v2rayN.Forms
}
private void DisplayToolStatus()
{
+ ssMain.SuspendLayout();
toolSslSocksPort.Text =
toolSslHttpPort.Text =
toolSslPacPort.Text = "OFF";
@@ -388,6 +382,7 @@ namespace v2rayN.Forms
break;
}
toolSslRouting.Text = routingStatus;
+ ssMain.ResumeLayout();
RefreshTaryIcon();
}
@@ -411,7 +406,10 @@ namespace v2rayN.Forms
autoLatencyRefreshTask = Task.Run(async delegate
{
await Task.Delay(2000);
- toolSslServerLatencyRefresh();
+ this.Invoke((MethodInvoker)(delegate
+ {
+ toolSslServerLatencyRefresh();
+ }));
});
}
}
@@ -421,37 +419,42 @@ namespace v2rayN.Forms
///
/// 载入V2ray
///
- private void LoadV2ray()
+ private async void LoadV2ray()
{
- tsbReload.Enabled = false;
-
- if (Global.reloadV2ray)
+ this.Invoke((MethodInvoker)(delegate
{
- ClearMsg();
- }
- v2rayHandler.LoadV2ray(config);
+ tsbReload.Enabled = false;
+
+ if (Global.reloadV2ray)
+ {
+ ClearMsg();
+ }
+ }));
+ await v2rayHandler.LoadV2ray(config);
Global.reloadV2ray = false;
- ConfigHandler.SaveConfig(ref config, false);
+ ChangePACButtonStatus(config.listenerType);
+ //ConfigHandler.SaveConfig(ref config, false); // ChangePACButtonStatus does it.
statistics?.SaveToFile();
- ChangePACButtonStatus(config.listenerType);
+ this.Invoke((MethodInvoker)(delegate
+ {
+ tsbReload.Enabled = true;
- tsbReload.Enabled = true;
-
- autoLatencyRefresh();
+ autoLatencyRefresh();
+ }));
}
///
- /// 关闭V2ray
+ /// 关闭相关组件
///
- private void CloseV2ray()
+ private void Closes()
{
- ConfigHandler.SaveConfig(ref config, false);
+ //ConfigHandler.SaveConfig(ref config, false); // ChangePACButtonStatus does it.
+ Task.Run(() => ChangePACButtonStatus(ListenerType.noHttpProxy));
+ Task.Run(() => v2rayHandler.V2rayStop());
+ Task.Run(() => PACServerHandle.Stop());
statistics?.SaveToFile();
-
- ChangePACButtonStatus(0);
-
- v2rayHandler.V2rayStop();
+ statistics?.Close();
}
#endregion
@@ -785,13 +788,18 @@ namespace v2rayN.Forms
{
string tab = "";
if (sender == toolSslRouting) tab = "tabPreDefinedRules";
+
OptionSettingForm fm = new OptionSettingForm(tab);
if (fm.ShowDialog() == DialogResult.OK)
{
//刷新
RefreshServers();
- LoadV2ray();
- HttpProxyHandle.RestartHttpAgent(config, true);
+ //Application.DoEvents();
+ Task.Run(() =>
+ {
+ LoadV2ray();
+ HttpProxyHandle.RestartHttpAgent(config, true);
+ });
}
}
@@ -1253,7 +1261,8 @@ namespace v2rayN.Forms
item.Checked = ((int)type == k);
}
- ConfigHandler.SaveConfig(ref config, false);
+ Global.reloadV2ray = false;
+ ConfigHandler.SaveConfig(ref config);
DisplayToolStatus();
}
@@ -1369,7 +1378,7 @@ namespace v2rayN.Forms
try
{
- CloseV2ray();
+ Closes();
string fileName = downloadHandle.DownloadFileName;
fileName = Utils.GetPath(fileName);
diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs
index 58ed9d5a..862910fa 100644
--- a/v2rayN/v2rayN/Global.cs
+++ b/v2rayN/v2rayN/Global.cs
@@ -171,7 +171,7 @@ namespace v2rayN
#region 全局变量
///
- /// 是否需要重启服务V2ray
+ /// 是否需要重启服务V2ray。如果为假,LoadV2ray()不做任何事。
///
public static bool reloadV2ray
{
diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs
index 3dae84b1..ec9b4d92 100644
--- a/v2rayN/v2rayN/Handler/ConfigHandler.cs
+++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs
@@ -334,26 +334,22 @@ namespace v2rayN.Handler
}
///
- /// 保参数
+ /// 保存参数
///
///
///
- public static int SaveConfig(ref Config config, bool reload = true)
+ public static int SaveConfig(ref Config config)
{
- Global.reloadV2ray = reload;
-
- ToJsonFile(config);
-
- return 0;
+ return ToJsonFile(config);
}
///
/// 存储文件
///
///
- private static void ToJsonFile(Config config)
+ private static int ToJsonFile(Config config)
{
- Utils.ToJsonFile(config, Utils.GetPath(configRes));
+ return Utils.ToJsonFile(config, Utils.GetPath(configRes));
}
///
diff --git a/v2rayN/v2rayN/Handler/V2rayHandler.cs b/v2rayN/v2rayN/Handler/V2rayHandler.cs
index e367bef2..d3df7118 100644
--- a/v2rayN/v2rayN/Handler/V2rayHandler.cs
+++ b/v2rayN/v2rayN/Handler/V2rayHandler.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
+using System.Threading.Tasks;
using v2rayN.Mode;
namespace v2rayN.Handler
@@ -38,21 +39,18 @@ namespace v2rayN.Handler
///
/// 载入V2ray
///
- public void LoadV2ray(Config config)
+ public Task LoadV2ray(Config config)
{
- if (Global.reloadV2ray)
+ return Task.Run(() =>
{
+ if (!Global.reloadV2ray) return;
+
string fileName = Utils.GetPath(v2rayConfigRes);
- if (V2rayConfigHandler.GenerateClientConfig(config, fileName, false, out string msg) != 0)
- {
- ShowMsg(false, msg);
- }
- else
- {
- ShowMsg(true, msg);
+ bool bOk = V2rayConfigHandler.GenerateClientConfig(config, fileName, false, out string msg) == 0;
+ ShowMsg(bOk, msg);
+ if (bOk)
V2rayRestart();
- }
- }
+ });
}
///