尝试修复退出错误

修复停止时进程堵塞
This commit is contained in:
ChsBuffer
2020-07-25 04:02:01 +08:00
parent 6174e78696
commit bbf9c5ed7c
11 changed files with 160 additions and 151 deletions

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Text;
@@ -67,10 +68,14 @@ namespace Netch.Controllers
Instance.Kill();
Instance.WaitForExit();
}
catch (Exception e)
catch (Win32Exception e)
{
Logging.Error($"停止 {MainFile} 错误:\n" + e);
}
catch
{
// ignored
}
}

View File

@@ -146,9 +146,14 @@ namespace Netch.Controllers
/// </summary>
public void Stop()
{
Task.Run(() => pEncryptedProxyController?.Stop());
Task.Run(() => UsingPorts.Clear());
pModeController?.Stop();
var tasks = new[]
{
Task.Factory.StartNew(() => pEncryptedProxyController?.Stop()),
Task.Factory.StartNew(() => UsingPorts.Clear()),
Task.Factory.StartNew(() => pModeController?.Stop()),
Task.Factory.StartNew(() => pNTTController.Stop())
};
Task.WaitAll(tasks);
}
public static void KillProcessByName(string name)

View File

@@ -1,5 +1,6 @@
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;
using Netch.Models;
@@ -30,7 +31,8 @@ namespace Netch.Controllers
/// <returns>是否启动成功</returns>
public override bool Start(Server server, Mode mode)
{
RecordPrevious();
Task.Run(RecordPrevious);
try
{
if (server.Type == "Socks5")
@@ -79,21 +81,20 @@ namespace Netch.Controllers
/// </summary>
public override void Stop()
{
try
var tasks = new[]
{
pPrivoxyController.Stop();
NativeMethods.SetGlobal(prevHTTP, prevBypass);
if (prevPAC != "")
NativeMethods.SetURL(prevPAC);
if (!prevEnabled)
NativeMethods.SetDIRECT();
prevEnabled = false;
}
catch (Exception e)
{
Logging.Error("停止HTTP控制器错误\n" + e);
}
Task.Factory.StartNew(pPrivoxyController.Stop),
Task.Factory.StartNew(() =>
{
NativeMethods.SetGlobal(prevHTTP, prevBypass);
if (prevPAC != "")
NativeMethods.SetURL(prevPAC);
if (!prevEnabled)
NativeMethods.SetDIRECT();
prevEnabled = false;
})
};
Task.WaitAll(tasks);
}
}
}

View File

@@ -7,6 +7,7 @@ using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Netch.Models;
using Netch.Properties;
@@ -366,10 +367,11 @@ namespace Netch.Controllers
{
Thread.Sleep(10);
if (State == State.Started) return true;
if (State == State.Stopped)
switch (State)
{
case State.Started:
return true;
case State.Stopped:
Stop();
return false;
}
@@ -383,9 +385,13 @@ namespace Netch.Controllers
/// </summary>
public override void Stop()
{
StopInstance();
ClearBypass();
pDNSController.Stop();
var tasks = new[]
{
Task.Factory.StartNew(StopInstance),
Task.Factory.StartNew(ClearBypass),
Task.Factory.StartNew(pDNSController.Stop)
};
Task.WaitAll(tasks);
}
/// <summary>

View File

@@ -43,9 +43,9 @@ namespace Netch.Controllers
return (true, natType, localEnd, publicEnd);
}
catch (Exception)
catch (Exception e)
{
Logging.Error("NTT 进程出错");
Logging.Error("NTT 进程出错\n" + e);
Stop();
return (false, null, null, null);
}
@@ -57,11 +57,9 @@ namespace Netch.Controllers
_lastResult = e.Data;
}
/// <summary>
/// 无用
/// </summary>
public override void Stop()
{
StopInstance();
}
}
}