浏览代码

使用Monitor无法在线程内部调用Exit

Jeff 2 年之前
父节点
当前提交
4974535ac7
共有 1 个文件被更改,包括 10 次插入9 次删除
  1. 10 9
      FactoryTool_CShare/Views/OperationPanel.cs

+ 10 - 9
FactoryTool_CShare/Views/OperationPanel.cs

@@ -47,8 +47,9 @@ namespace MOKA_Factory_Tools
         Thread SNTextFocus;
         Thread SNTextFocus;
         bool FocusMark = false;
         bool FocusMark = false;
         Thread WritekeyThread;
         Thread WritekeyThread;
-        // 线程锁:当前窗口抄写线程只能开一个;
-        private readonly object WriteKeyThreadLock;
+        // 当前窗口抄写线程只能开一个;
+        private readonly object MyLock;
+        private bool IsThreadRunning { get; set; } = false;
         string availableCount = "unknow";
         string availableCount = "unknow";
         // 只有NTF才用该变量, 0试产, 1=量产;
         // 只有NTF才用该变量, 0试产, 1=量产;
         int nOrderType = -1;
         int nOrderType = -1;
@@ -106,7 +107,7 @@ namespace MOKA_Factory_Tools
                 ProductMsg_Text.Text = "Roku:";
                 ProductMsg_Text.Text = "Roku:";
             if (functionSetting.NTF)
             if (functionSetting.NTF)
                 ntfBLL = new NTFBLL(functionSetting.Mexican_NTF);
                 ntfBLL = new NTFBLL(functionSetting.Mexican_NTF);
-            WriteKeyThreadLock = new object();
+            MyLock = new object();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -771,13 +772,16 @@ namespace MOKA_Factory_Tools
 
 
         private void StartWriteKeyThread()
         private void StartWriteKeyThread()
         {
         {
-            if ( !Monitor.IsEntered(WriteKeyThreadLock) )
+            Monitor.Enter(MyLock);
+            if (!IsThreadRunning)
             {
             {
-                Monitor.Enter(WriteKeyThreadLock);
                 timer1.Start();
                 timer1.Start();
+                IsThreadRunning = true;
                 WritekeyThread = new Thread(Writekey);
                 WritekeyThread = new Thread(Writekey);
                 WritekeyThread.Start();
                 WritekeyThread.Start();
             }
             }
+            Monitor.Exit(MyLock);
+            
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -5195,7 +5199,7 @@ namespace MOKA_Factory_Tools
             EnableText(SNText);            
             EnableText(SNText);            
 #endif
 #endif
             EnableButton(BtnClickstart);
             EnableButton(BtnClickstart);
-            Monitor.Exit(WriteKeyThreadLock);
+            IsThreadRunning = false;
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -5625,9 +5629,6 @@ namespace MOKA_Factory_Tools
                     {
                     {
                         Thread.Sleep(100);
                         Thread.Sleep(100);
                     }
                     }
-
-                    if (Monitor.IsEntered(WriteKeyThreadLock))
-                        Monitor.Exit(WriteKeyThreadLock);
                 }
                 }
             }
             }
             UsingTime_Text.Text = "0";
             UsingTime_Text.Text = "0";