From 8a3ab64a65da226636743be07c4bee63f50da25d Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期六, 06 三月 2021 11:35:20 +0800
Subject: [PATCH] 1. 解决软件异常崩溃问题

---
 src/Bro.UI.Model.Winform/UI/CanvasImage.cs |   24 +++++++++++++++++++++++-
 1 files changed, 23 insertions(+), 1 deletions(-)

diff --git a/src/Bro.UI.Model.Winform/UI/CanvasImage.cs b/src/Bro.UI.Model.Winform/UI/CanvasImage.cs
index 3bd6941..582061d 100644
--- a/src/Bro.UI.Model.Winform/UI/CanvasImage.cs
+++ b/src/Bro.UI.Model.Winform/UI/CanvasImage.cs
@@ -31,7 +31,8 @@
             MouseMove += Canvas_MouseMove;
             MouseUp += Canvas_MouseUp;
 
-            EventRouter.ChangeElementsMouseState = OnElementChangeMouseState;
+            EventRouter.ChangeElementsMouseState -= OnElementChangeMouseState;
+            EventRouter.ChangeElementsMouseState += OnElementChangeMouseState;
         }
 
         #region Event
@@ -66,8 +67,21 @@
         #endregion
 
         #region 閲嶇粯
+        volatile bool _isInRepaint = false;
+        object _isInRepaintLock = new object();
         protected override void OnPaint(PaintEventArgs e)
         {
+            //if (_isInRepaint)
+            //    return;
+
+            //lock (_isInRepaintLock)
+            //{
+            //    if (_isInRepaint)
+            //        return;
+            //}
+
+            //_isInRepaint = true;
+
             try
             {
                 Rectangle rect = ClientRectangle;
@@ -77,6 +91,9 @@
                 Graphics g = myBuffer.Graphics;
                 g.SmoothingMode = SmoothingMode.HighSpeed;
                 g.PixelOffsetMode = PixelOffsetMode.HighSpeed;
+                g.InterpolationMode = InterpolationMode.Low;
+                g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault;
+                g.CompositingQuality = CompositingQuality.HighSpeed;
                 g.Clear(BackColor);
 
                 g.MultiplyTransform(Matrix);
@@ -172,6 +189,8 @@
             catch (Exception)
             {
             }
+
+            _isInRepaint = false;
         }
 
         private void halfTransparent()
@@ -613,6 +632,9 @@
             if (map == null)
                 return;
 
+            MAP?.Dispose();
+            MAP = null;
+
             MAP = map;
             //MAP = map;
 

--
Gitblit v1.8.0