Browse Source

修复未完全关闭进程的bug

liufei 3 years ago
parent
commit
3483bf88c2
3 changed files with 17 additions and 4 deletions
  1. 1 1
      MainWindow.xaml
  2. 4 0
      MainWindow.xaml.cs
  3. 12 3
      Thread/MouseHookThread.cs

+ 1 - 1
MainWindow.xaml

@@ -124,7 +124,7 @@
                         <hc:NotifyIcon.ContextMenu>
                             <ContextMenu Width="130">
                                 <MenuItem Header="打开面板" Click="ShowApp"/>
-                                <MenuItem Header="关闭托盘图标" Click="CloseBarIcon"/>
+                                <MenuItem Header="关闭图标" Click="CloseBarIcon"/>
                                 <MenuItem Header="待办"  Click="BacklogMenuClick"/>
                                 <MenuItem Header="程序目录"  Click="OpenThisDir"/>
                                 <MenuItem Header="设置"  Click="ConfigApp"/>

+ 4 - 0
MainWindow.xaml.cs

@@ -426,6 +426,7 @@ namespace GeekDesk
         /// <param name="e"></param>
         private void ExitApp(object sender, RoutedEventArgs e)
         {
+            MouseHookThread.Dispose();
             Application.Current.Shutdown();
         }
 
@@ -506,10 +507,13 @@ namespace GeekDesk
         /// <param name="e"></param>
         private void ReStartApp(object sender, RoutedEventArgs e)
         {
+            MouseHookThread.Dispose();
+
             Process p = new Process();
             p.StartInfo.FileName = Constants.APP_DIR + Constants.MY_NAME + ".exe";
             p.StartInfo.WorkingDirectory = Constants.APP_DIR;
             p.Start();
+
             Application.Current.Shutdown();
         }
 

+ 12 - 3
Thread/MouseHookThread.cs

@@ -15,19 +15,28 @@ namespace GeekDesk.Thread
     public class MouseHookThread
     {
         private static AppConfig appConfig = MainWindow.appData.AppConfig;
-        public static IKeyboardMouseEvents m_GlobalHook = Hook.GlobalEvents();
-        
+        private static IKeyboardMouseEvents m_GlobalHook = Hook.GlobalEvents();
+        private static Dispatcher dispatcher;
+
+
 
         public static void MiddleHook()
         {
             //使用dispatcher来单独监听UI线程  防止程序卡顿
-            Dispatcher dispatcher = DispatcherBuild.Build();
+            dispatcher = DispatcherBuild.Build();
             dispatcher.Invoke((Action)(() =>
             {
                 m_GlobalHook.MouseDownExt += M_GlobalHook_MouseDownExt;
             }));
         }
 
+        public static void Dispose()
+        {
+            m_GlobalHook.MouseDownExt -= M_GlobalHook_MouseDownExt;
+            m_GlobalHook.Dispose();
+            dispatcher.InvokeShutdown();
+        }
+
         /// <summary>
         /// 鼠标中键呼出
         /// </summary>