fix: 收敛旧控件资源与后台线程生命周期

This commit is contained in:
2026-08-11 14:12:18 +08:00
parent f1ce6ff658
commit a9c986f9d5
20 changed files with 1145 additions and 380 deletions
@@ -26,8 +26,9 @@ namespace Lskj.Control.Model
/// <summary>
/// 表格拖拽到表格
/// </summary>
public class BandedGridDragGrid
public class BandedGridDragGrid : IDisposable
{
private bool _disposed;
/// <summary>
/// 是否正在拖拽
/// </summary>
@@ -106,6 +107,99 @@ namespace Lskj.Control.Model
this._targetGridView.GridControl.DragEnter += new System.Windows.Forms.DragEventHandler(gridControl_DragEnter);
this._targetGridView.GridControl.DragDrop += new System.Windows.Forms.DragEventHandler(gridControl_DragDrop);
this._targetGridView.GridControl.DragLeave += new EventHandler(gridControl_DragLeave);
this._sourceGridView.Disposed += OnGridViewDisposed;
if (!ReferenceEquals(this._sourceGridView, this._targetGridView))
{
this._targetGridView.Disposed += OnGridViewDisposed;
}
}
private void OnGridViewDisposed(object sender, EventArgs e)
{
Dispose();
}
public void Dispose()
{
if (_disposed)
{
return;
}
_disposed = true;
BandedGridView sourceGridView = _sourceGridView;
GridView targetGridView = _targetGridView;
if (sourceGridView != null)
{
sourceGridView.MouseDown -= sourceGridView_MouseDown;
sourceGridView.MouseMove -= sourceGridView_MouseMove;
sourceGridView.MouseUp -= sourceGridView_MouseUp;
sourceGridView.RowClick -= OnRowClick;
sourceGridView.Disposed -= OnGridViewDisposed;
}
if (targetGridView != null)
{
if (targetGridView.GridControl != null)
{
targetGridView.GridControl.DragOver -= gridControl_DragOver;
targetGridView.GridControl.DragEnter -= gridControl_DragEnter;
targetGridView.GridControl.DragDrop -= gridControl_DragDrop;
targetGridView.GridControl.DragLeave -= gridControl_DragLeave;
}
if (!ReferenceEquals(sourceGridView, targetGridView))
{
targetGridView.Disposed -= OnGridViewDisposed;
}
}
RemoveRegistration(
StaticBandedControl.BandedGridViewDragGridDic,
sourceGridView,
this);
RemoveRegistration(
StaticBandedControl.BandedTargetViewDragGridDic,
targetGridView,
this);
if (ReferenceEquals(
StaticBandedControl.SourceDragBandedGridView,
sourceGridView))
{
StaticBandedControl.SourceDragBandedGridView = null;
}
OnDragComplete = null;
DragHander.Clear();
_hitInfo = null;
_sourceGridView = null;
_targetGridView = null;
}
private static void RemoveRegistration<TKey>(
Dictionary<TKey, List<BandedGridDragGrid>> registrations,
TKey key,
BandedGridDragGrid registration)
where TKey : class
{
if (key == null)
{
return;
}
List<BandedGridDragGrid> registrationsForView;
if (!registrations.TryGetValue(key, out registrationsForView))
{
return;
}
registrationsForView.Remove(registration);
if (registrationsForView.Count == 0)
{
registrations.Remove(key);
}
}
/// <summary>
/// 点击时候判断位置
+93 -1
View File
@@ -29,8 +29,9 @@ namespace Lskj.Control.Model
/// <summary>
/// 表格拖拽到表格
/// </summary>
public class GridDragGrid
public class GridDragGrid : IDisposable
{
private bool _disposed;
/// <summary>
/// 是否正在拖拽
/// </summary>
@@ -119,6 +120,97 @@ namespace Lskj.Control.Model
this._targetGridView.GridControl.DragEnter += new System.Windows.Forms.DragEventHandler(gridControl_DragEnter);
this._targetGridView.GridControl.DragDrop += new System.Windows.Forms.DragEventHandler(gridControl_DragDrop);
this._targetGridView.GridControl.DragLeave += new EventHandler(gridControl_DragLeave);
this._sourceGridView.Disposed += OnGridViewDisposed;
if (!ReferenceEquals(this._sourceGridView, this._targetGridView))
{
this._targetGridView.Disposed += OnGridViewDisposed;
}
}
private void OnGridViewDisposed(object sender, EventArgs e)
{
Dispose();
}
public void Dispose()
{
if (_disposed)
{
return;
}
_disposed = true;
GridView sourceGridView = _sourceGridView;
GridView targetGridView = _targetGridView;
if (sourceGridView != null)
{
sourceGridView.MouseDown -= sourceGridView_MouseDown;
sourceGridView.MouseMove -= sourceGridView_MouseMove;
sourceGridView.MouseUp -= sourceGridView_MouseUp;
sourceGridView.RowClick -= OnRowClick;
sourceGridView.Disposed -= OnGridViewDisposed;
}
if (targetGridView != null)
{
if (targetGridView.GridControl != null)
{
targetGridView.GridControl.DragOver -= gridControl_DragOver;
targetGridView.GridControl.DragEnter -= gridControl_DragEnter;
targetGridView.GridControl.DragDrop -= gridControl_DragDrop;
targetGridView.GridControl.DragLeave -= gridControl_DragLeave;
}
if (!ReferenceEquals(sourceGridView, targetGridView))
{
targetGridView.Disposed -= OnGridViewDisposed;
}
}
RemoveRegistration(
StaticControl.GridViewDragGridDic,
sourceGridView,
this);
RemoveRegistration(
StaticControl.TargetViewDragGridDic,
targetGridView,
this);
if (ReferenceEquals(StaticControl.SourceDragGridView, sourceGridView))
{
StaticControl.SourceDragGridView = null;
}
OnDragComplete = null;
DragHander.Clear();
_hitInfo = null;
_sourceGridView = null;
_targetGridView = null;
}
private static void RemoveRegistration<TKey>(
Dictionary<TKey, List<GridDragGrid>> registrations,
TKey key,
GridDragGrid registration)
where TKey : class
{
if (key == null)
{
return;
}
List<GridDragGrid> registrationsForView;
if (!registrations.TryGetValue(key, out registrationsForView))
{
return;
}
registrationsForView.Remove(registration);
if (registrationsForView.Count == 0)
{
registrations.Remove(key);
}
}
/// <summary>
/// 点击时候判断位置
+16 -3
View File
@@ -73,10 +73,23 @@ namespace Lskj.Control.Model
/// </summary>
public static void HideForm()
{
bool isSplashFormVisible = LoadForm.IsSplashFormVisible;
if (isSplashFormVisible)
SplashScreenManager manager = _loadForm;
if (manager == null)
return;
try
{
_loadForm.CloseWaitForm();
if (manager.IsSplashFormVisible)
{
manager.CloseWaitForm();
manager.WaitForSplashFormClose();
}
}
finally
{
manager.Dispose();
if (ReferenceEquals(_loadForm, manager))
_loadForm = null;
}
}
}