ntminer 6 years ago
parent
commit
54a98925f1
2 changed files with 13 additions and 4 deletions
  1. 7 3
      src/NTMinerLogging/Write.cs
  2. 6 1
      src/NTMinerWpf/UIThread.cs

+ 7 - 3
src/NTMinerLogging/Write.cs

@@ -3,7 +3,11 @@ using System.Threading;
 
 namespace NTMiner {
     public static class Write {
-        public static int UIThreadId;
+        private static int _uiThreadId;
+
+        public static void SetUIThreadId(int value) {
+            _uiThreadId = value;
+        }
 
         private static bool _isEnabled = true;
         public static void Enable() {
@@ -75,7 +79,7 @@ namespace NTMiner {
             if (!_isEnabled) {
                 return;
             }
-            UserLineMethod?.Invoke($"{(Thread.CurrentThread.ManagedThreadId == UIThreadId ? "UI " : "   ")}{text}", foreground);
+            UserLineMethod?.Invoke($"{(Thread.CurrentThread.ManagedThreadId == _uiThreadId ? "UI " : "   ")}{text}", foreground);
         }
 
         public static void DevLine(string text, MessageType messageType = MessageType.Default) {
@@ -86,7 +90,7 @@ namespace NTMiner {
                 return;
             }
             InitOnece();
-            text = $"{(Thread.CurrentThread.ManagedThreadId == UIThreadId ? "UI " : "   ")}{DateTime.Now.ToString("HH:mm:ss fff")}  {messageType.ToString()} {text}";
+            text = $"{(Thread.CurrentThread.ManagedThreadId == _uiThreadId ? "UI " : "   ")}{DateTime.Now.ToString("HH:mm:ss fff")}  {messageType.ToString()} {text}";
             ConsoleColor oldColor = Console.ForegroundColor;
             Console.ForegroundColor = messageType.ToConsoleColor();
             Console.WriteLine(text);

+ 6 - 1
src/NTMinerWpf/UIThread.cs

@@ -4,9 +4,14 @@ using System.Windows.Threading;
 namespace NTMiner {
     public static class UIThread {
         private static Dispatcher _dispatcher;
+        /// <summary>
+        /// 执行两个操作:
+        /// 1,记下对Dispatcher.CurrentDispatcher的引用,因为Splash会令开一个UI线程,防止访问到Splash线程的Dispatcher.CurrentDispatcher;
+        /// 2,设置Writer.UIThreadId;
+        /// </summary>
         public static void InitializeWithDispatcher() {
             _dispatcher = Dispatcher.CurrentDispatcher;
-            Write.UIThreadId = _dispatcher.Thread.ManagedThreadId;
+            Write.SetUIThreadId(_dispatcher.Thread.ManagedThreadId);
         }
 
         /// <summary>