优化多项操作卡顿问题

This commit is contained in:
ww-rm
2025-03-30 20:52:22 +08:00
parent ce1f75e8a5
commit 4654d1d9c2
3 changed files with 27 additions and 3 deletions

View File

@@ -54,6 +54,7 @@
toolStripMenuItem_DetailsView = new ToolStripMenuItem(); toolStripMenuItem_DetailsView = new ToolStripMenuItem();
imageList_LargeIcon = new ImageList(components); imageList_LargeIcon = new ImageList(components);
imageList_SmallIcon = new ImageList(components); imageList_SmallIcon = new ImageList(components);
timer_SelectedIndexChangedDebounce = new System.Windows.Forms.Timer(components);
contextMenuStrip.SuspendLayout(); contextMenuStrip.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
@@ -250,6 +251,11 @@
imageList_SmallIcon.ImageSize = new Size(48, 48); imageList_SmallIcon.ImageSize = new Size(48, 48);
imageList_SmallIcon.TransparentColor = Color.Transparent; imageList_SmallIcon.TransparentColor = Color.Transparent;
// //
// timer_SelectedIndexChangedDebounce
//
timer_SelectedIndexChangedDebounce.Interval = 30;
timer_SelectedIndexChangedDebounce.Tick += timer_SelectedIndexChangedDebounce_Tick;
//
// SpineListView // SpineListView
// //
AutoScaleDimensions = new SizeF(11F, 24F); AutoScaleDimensions = new SizeF(11F, 24F);
@@ -287,5 +293,6 @@
private ToolStripMenuItem toolStripMenuItem_SelectAll; private ToolStripMenuItem toolStripMenuItem_SelectAll;
private ToolStripSeparator toolStripSeparator4; private ToolStripSeparator toolStripSeparator4;
private ToolStripMenuItem toolStripMenuItem_AddFromClipboard; private ToolStripMenuItem toolStripMenuItem_AddFromClipboard;
private System.Windows.Forms.Timer timer_SelectedIndexChangedDebounce;
} }
} }

View File

@@ -228,6 +228,18 @@ namespace SpineViewer.Controls
} }
private void listView_SelectedIndexChanged(object sender, EventArgs e) private void listView_SelectedIndexChanged(object sender, EventArgs e)
{
timer_SelectedIndexChangedDebounce.Stop();
timer_SelectedIndexChangedDebounce.Start();
}
private void timer_SelectedIndexChangedDebounce_Tick(object sender, EventArgs e)
{
timer_SelectedIndexChangedDebounce.Stop();
_listView_SelectedIndexChanged(listView, EventArgs.Empty);
}
private void _listView_SelectedIndexChanged(object sender, EventArgs e)
{ {
lock (Spines) lock (Spines)
{ {
@@ -395,17 +407,19 @@ namespace SpineViewer.Controls
return; return;
} }
foreach (var i in listView.SelectedIndices.Cast<int>().OrderByDescending(x => x)) lock (Spines)
{ {
listView.Items.RemoveAt(i); listView.BeginUpdate();
lock (Spines) foreach (var i in listView.SelectedIndices.Cast<int>().OrderByDescending(x => x))
{ {
listView.Items.RemoveAt(i);
var spine = spines[i]; var spine = spines[i];
spines.RemoveAt(i); spines.RemoveAt(i);
listView.SmallImageList.Images.RemoveByKey(spine.ID); listView.SmallImageList.Images.RemoveByKey(spine.ID);
listView.LargeImageList.Images.RemoveByKey(spine.ID); listView.LargeImageList.Images.RemoveByKey(spine.ID);
spine.Dispose(); spine.Dispose();
} }
listView.EndUpdate();
} }
} }

View File

@@ -126,4 +126,7 @@
<metadata name="imageList_SmallIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="imageList_SmallIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>252, 19</value> <value>252, 19</value>
</metadata> </metadata>
<metadata name="timer_SelectedIndexChangedDebounce.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>771, 24</value>
</metadata>
</root> </root>