Browse Source

优化网络卡顿的问题

felix 1 year ago
parent
commit
7785ef0e11

+ 6 - 4
Vinno.FIS.Sonopost.Wireless/Wifi.cs

@@ -31,7 +31,7 @@ namespace Vinno.FIS.Sonopost.Wireless
         /// <summary>
         /// Returns a list over all available access points
         /// </summary>
-        public List<AccessPoint> GetAccessPoints(string id)
+        public List<AccessPoint> GetAccessPoints(string id, bool wifiScan)
         {
             List<AccessPoint> accessPoints = new List<AccessPoint>();
             if (_client.NoWifiAvailable)
@@ -42,8 +42,10 @@ namespace Vinno.FIS.Sonopost.Wireless
             {
                 return accessPoints;
             }
-
-            wlanInterface.Scan();
+            if (wifiScan)
+            {
+                wlanInterface.Scan();//会影响网络
+            }
             WlanAvailableNetwork[] rawNetworks = wlanInterface.GetAvailableNetworkList(WlanGetAvailableNetworkFlags.IncludeAllAdhocProfiles);
             List<WlanAvailableNetwork> networks = new List<WlanAvailableNetwork>();
 
@@ -172,4 +174,4 @@ namespace Vinno.FIS.Sonopost.Wireless
         Disconnected,
         Connected
     }
-}
+}

+ 4 - 4
Vinno.FIS.Sonopost/Features/Network/WirelessNetworkInterfaceInfo.cs

@@ -24,20 +24,20 @@ namespace Vinno.FIS.Sonopost.Features.Network
 
         public event EventHandler<WifiStatusEventArgs> ConnectionStatusChanged;
 
-        public WirelessNetworkInterfaceInfo(NetworkInterface networkInterface) : base(networkInterface)
+        public WirelessNetworkInterfaceInfo(NetworkInterface networkInterface, bool wifiScan) : base(networkInterface)
         {
             _wifi = new Wifi();
             _wlanInterface = networkInterface;
             _wirelessNetworks = new List<AccessPoint>();
             _currentWirelessNetworks = new List<AccessPoint>();
-            RefreshNetworks();
+            RefreshNetworks(wifiScan);
         }
 
-        private void RefreshNetworks()
+        private void RefreshNetworks(bool wifiScan)
         {
             try
             {
-                var list = _wifi.GetAccessPoints(_wlanInterface.Id);
+                var list = _wifi.GetAccessPoints(_wlanInterface.Id, wifiScan);
                 _wirelessNetworks.Clear();
                 foreach (var item in list.OrderBy(c => c.SignalStrength))
                 {

+ 1 - 1
Vinno.FIS.Sonopost/Managers/Interfaces/INetworkManager.cs

@@ -91,6 +91,6 @@ namespace Vinno.FIS.Sonopost.Managers.Interfaces
         /// <summary>
         /// 刷新网络
         /// </summary>
-        void RefreshAllNetworks();
+        void RefreshAllNetworks(bool wifiScan);
     }
 }

+ 14 - 10
Vinno.FIS.Sonopost/Managers/NetworkManager.cs

@@ -83,8 +83,8 @@ namespace Vinno.FIS.Sonopost.Managers
             _deviceManager = AppManager.Instance.GetManager<IDeviceManager>();
             _deviceManager.WifiModuleInserted += OnWifiModuleInserted;
             _deviceManager.NetworkAddressChanged += OnNetworkAddressChanged;
-            RefreshAllNetworks();
-            _timingRefreshInterval = 10;
+            RefreshAllNetworks(true);
+            _timingRefreshInterval = 15;
             StartTimerRefreshTask();
             AutoReconnectWifi(false);
         }
@@ -99,6 +99,10 @@ namespace Vinno.FIS.Sonopost.Managers
 
         private void AutoReconnectWifi(bool needRefresh)
         {
+            if (needRefresh)
+            {
+                RefreshAllNetworks(true);
+            }
             var isAutoConnect = SonopostUserDefinedSettings.Instance.NetworkSetting.IsAutoConnect;
             var wifiName = SonopostUserDefinedSettings.Instance.NetworkSetting.WifiName;
             var wifiPassword = DesBuilder.Decrypt(SonopostUserDefinedSettings.Instance.NetworkSetting.WifiPassword);
@@ -106,10 +110,6 @@ namespace Vinno.FIS.Sonopost.Managers
             Logger.WriteLineInfo($"Network Manager Auto Conncect Wifi :{isAutoConnect},MacAddress:{wifiMacAddress}");
             if (!string.IsNullOrWhiteSpace(wifiMacAddress) && isAutoConnect)
             {
-                if (needRefresh)
-                {
-                    RefreshAllNetworks();
-                }
                 var wifiInfo = GetAllNetworkInterfaceInfos().FirstOrDefault(x => x.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 && x.MacAddress == wifiMacAddress);
                 if (wifiInfo == null)
                 {
@@ -146,11 +146,11 @@ namespace Vinno.FIS.Sonopost.Managers
         {
             lock (_networkAddresslocker)
             {
-                RefreshAllNetworks();
+                RefreshAllNetworks(false);
             }
         }
 
-        public void RefreshAllNetworks()
+        public void RefreshAllNetworks(bool wlanReScan)
         {
             try
             {
@@ -184,7 +184,7 @@ namespace Vinno.FIS.Sonopost.Managers
                     }
                     else if (network.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
                     {
-                        var wirelessInterfaceInfo = new WirelessNetworkInterfaceInfo(network);
+                        var wirelessInterfaceInfo = new WirelessNetworkInterfaceInfo(network, wlanReScan);
                         _networkInterfaceInfos.Add(wirelessInterfaceInfo);
                     }
                 }
@@ -192,6 +192,10 @@ namespace Vinno.FIS.Sonopost.Managers
                 {
                     _currentNetworkInterfaces = _networkInterfaceInfos.ToList();
                 }
+                if (wlanReScan)
+                {
+                    Thread.Sleep(3000);//扫描网络会卡顿3秒左右
+                }
                 SetCurrentNetwork();
             }
             catch (Exception ex)
@@ -585,7 +589,7 @@ namespace Vinno.FIS.Sonopost.Managers
                             {
                                 lock (_networkAddresslocker)
                                 {
-                                    RefreshAllNetworks();
+                                    RefreshAllNetworks(false);
                                 }
                             }
                             if (CurrentNetwork is WirelessNetworkInterfaceInfo wireless)

+ 1 - 1
Vinno.FIS.Sonopost/WebApi/Controllers/NetworkController.cs

@@ -337,7 +337,7 @@ namespace Vinno.FIS.Sonopost.WebApi.Controllers
         [WebApiAction]
         public Result RefreshAllNetworks()
         {
-            NetworkManager.RefreshAllNetworks();
+            NetworkManager.RefreshAllNetworks(true);
             return Result.Success();
         }
     }