Browse Source

Fix bug 【客户端】偶现安装新版客户端后运行,科研分析按钮置灰不可点,查看任务管理器结束fis进程,重启客户端才正常

jimmy.jiang@vinno.com 8 months ago
parent
commit
e3ebb7d3e0

+ 14 - 2
Client/PC/vStation/PipeLine/PipeLineMnager.cs

@@ -151,12 +151,12 @@ namespace vStation.PipeLine
         private static NamedPipeClientStream _client;
         private static bool _isInitialize = false;
         private static byte[] _receiveData = new byte[4 * 1024 * 1024];
-
+        private static int _initCount = 0;
 
         public static void Initialize(string name)
         {
             Logger.WriteLineInfo($"PipeClientManager _isConnected:{_isInitialize}");
-            Thread.Sleep(2000);
+            Thread.Sleep(3000);
             if (_isInitialize)
             {
                 return;
@@ -169,13 +169,25 @@ namespace vStation.PipeLine
             Logger.WriteLineInfo($"PipeClientManager Initialize 3");
             if (!_client.IsConnected)
             {
+                _initCount++;
+                if (_initCount >= 3)
+                {
+                    URMConfig.InvoekNeedRestartFIS();
+                    return;
+                }
+
+                Logger.WriteLineInfo($"PipeClientManager retrey times is {_initCount}");
                 Initialize(name);
             }
             _isInitialize = _client.IsConnected;
             if (_isInitialize)
             {
+                Logger.WriteLineInfo($"PipeClientManager Initialized success");
                 URMConfig.InvokePipelineCreated();
             }
+            else {
+                Logger.WriteLineInfo($"PipeClientManager Initialized failed count is {_initCount}");
+            }
         }
 
 

+ 7 - 0
Client/PC/vStation/URMStationRelevant/URMConfig.cs

@@ -59,6 +59,8 @@ namespace vStation.URMStationRelevant
 
 
         public static event EventHandler<bool> SmartCardReaddingChanged;
+
+        public static event EventHandler<bool> NeedRestartFIS;
         public static bool SmartCardReading
         {
             get {
@@ -90,6 +92,11 @@ namespace vStation.URMStationRelevant
             PipeLineCreated?.Invoke(null, EventArgs.Empty);
         }
 
+        public static void InvoekNeedRestartFIS()
+        {
+            NeedRestartFIS?.Invoke(null, true);
+        }
+
         public static bool GetIsSingleMode()
         {
             if (File.Exists(StationVersionPath))

+ 36 - 1
Client/PC/vStation/ViewModel/LoginViewModel.cs

@@ -171,10 +171,45 @@ namespace vStation.ViewModel
             SelectedAccount = Accounts.FirstOrDefault();
             SelectedLanguage = TranslateHelper.CurrentLanguage;
             URMConfig.SmartCardReaddingChanged += OnSmartCardReaddingChanged;
-
+            URMConfig.NeedRestartFIS += OnNeedRestartFIS;
             ContinuelyReadSmartCard();
         }
 
+        private void OnNeedRestartFIS(object sender, bool e)
+        {
+            Task.Run(() => {
+                CloseSlaveWindow();
+                Thread.Sleep(2000);
+                StartSlaveWindow();
+            });
+        }
+
+        private void CloseSlaveWindow()
+        {
+            KillProcessWithGivenName("fis", false);
+        }
+
+        private void KillProcessWithGivenName(string processName, bool killSelf = true)
+        {
+            Process[] processesByName = Process.GetProcessesByName(processName);
+            foreach (Process process in processesByName)
+            {
+                if (process.ProcessName == processName)
+                {
+                    if (killSelf)
+                    {
+                        process.Kill();
+                        process.WaitForExit();
+                    }
+                    else if (process.Id != Process.GetCurrentProcess().Id)
+                    {
+                        process.Kill();
+                        process.WaitForExit();
+                    }
+                }
+            }
+        }
+
         private void OnSmartCardReaddingChanged(object sender, bool e)
         {
             if (e)