From 0638edbbbb5b6a3aa09f5272ce879b1bf3903dee Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 13 三月 2026 12:35:57 +0800
Subject: [PATCH] fix: improve memory region code quality

---
 Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs |   31 ++++++++++++++++++++++++++++---
 1 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
index a564cbb..6ebd64c 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
@@ -19,6 +19,11 @@
         protected readonly ReaderWriterLockSlim _lock;
 
         /// <summary>
+        /// 閲婃斁鐘舵�佹爣蹇�
+        /// </summary>
+        protected bool _disposed = false;
+
+        /// <summary>
         /// 鍖哄煙绫诲瀷
         /// </summary>
         public abstract string RegionType { get; }
@@ -36,7 +41,7 @@
         {
             Size = size;
             _memory = new byte[size];
-            _lock = new ReaderWriterLockSlim();
+            _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
         }
 
         /// <summary>
@@ -66,6 +71,9 @@
         /// </summary>
         public virtual void Write(ushort offset, byte[] data)
         {
+            if (data == null)
+                throw new ArgumentNullException(nameof(data));
+
             _lock.EnterWriteLock();
             try
             {
@@ -100,9 +108,26 @@
         /// <summary>
         /// 閲婃斁璧勬簮
         /// </summary>
-        public virtual void Dispose()
+        public void Dispose()
         {
-            _lock?.Dispose();
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        /// <summary>
+        /// 閲婃斁璧勬簮
+        /// </summary>
+        /// <param name="disposing">鏄惁姝e湪閲婃斁鎵樼璧勬簮</param>
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!_disposed)
+            {
+                if (disposing)
+                {
+                    _lock?.Dispose();
+                }
+                _disposed = true;
+            }
         }
     }
 }

--
Gitblit v1.9.3