fix: 收敛旧控件资源与后台线程生命周期
This commit is contained in:
@@ -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>
|
||||
/// 点击时候判断位置
|
||||
|
||||
@@ -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>
|
||||
/// 点击时候判断位置
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user