Skip to content

Commit d275bb0

Browse files
committed
Much shorter UI freeze when loading many tracks into list
1 parent 7dee24c commit d275bb0

File tree

2 files changed

+14
-12
lines changed

2 files changed

+14
-12
lines changed

ff-utils-winforms/Forms/MainForm.StreamList.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,18 @@ public void UpdateTrackListUpDownBtnsState()
6363
trackListMoveDownBtn.Visible = newState;
6464
}
6565

66-
public bool ignoreNextStreamListItemCheck;
66+
public bool ignoreStreamListCheck;
6767

6868
private void streamList_ItemCheck(object sender, ItemCheckEventArgs e)
6969
{
70-
if (ignoreNextStreamListItemCheck)
71-
{
72-
ignoreNextStreamListItemCheck = false;
70+
if (ignoreStreamListCheck)
7371
return;
74-
}
7572

7673
if (e.NewValue != e.CurrentValue)
7774
this.BeginInvoke((MethodInvoker)(() => OnCheckedStreamsChange()));
7875
}
7976

80-
private void OnCheckedStreamsChange()
77+
public void OnCheckedStreamsChange()
8178
{
8279
UpdateDefaultStreamsUi();
8380
QuickConvertUi.LoadMetadataGrid();

ff-utils-winforms/UI/TrackList.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,25 +98,30 @@ public static async Task AddStreamsToList(MediaFile mediaFile, Color color, bool
9898

9999
Random r = new Random();
100100

101+
Program.mainForm.ignoreStreamListCheck = true;
102+
list.BeginUpdate();
103+
101104
foreach (Stream s in mediaFile.AllStreams)
102105
{
103106
try
104107
{
105108
MediaStreamListEntry entry = new MediaStreamListEntry(mediaFile, s);
106-
list.Items.Add(new ListViewItem { Text = entry.ToString(), Tag = entry, BackColor = color });
107109
bool check = s.Codec.ToLower().Trim() != "unknown" && !(s.Type == Stream.StreamType.Video && alreadyHasVidStream);
108-
Program.mainForm.ignoreNextStreamListItemCheck = true;
109-
list.Items.Cast<ListViewItem>().Last().Checked = check;
110+
list.Items.Add(new ListViewItem { Text = entry.ToString(), Tag = entry, BackColor = color, Checked = check });
110111
}
111112
catch (Exception e)
112113
{
113114
Logger.Log($"Error trying to load streams into UI: {e.Message}\n{e.StackTrace}");
114115
}
115116
}
116117

118+
list.EndUpdate();
119+
117120
if (switchToList && !RunTask.RunInstantly())
118121
Program.mainForm.MainTabList.SelectedIndex = 1;
119122

123+
Program.mainForm.OnCheckedStreamsChange();
124+
Program.mainForm.ignoreStreamListCheck = false;
120125
Program.mainForm.UpdateDefaultStreamsUi();
121126
Program.mainForm.UpdateTrackListUpDownBtnsState();
122127
}
@@ -244,7 +249,7 @@ public static void CheckAll(bool check)
244249
{
245250
for (int i = 0; i < Program.mainForm.streamList.Items.Count; i++)
246251
{
247-
Program.mainForm.ignoreNextStreamListItemCheck = i < (Program.mainForm.streamList.Items.Count - 1);
252+
Program.mainForm.ignoreStreamListCheck = i < (Program.mainForm.streamList.Items.Count - 1);
248253
Program.mainForm.streamList.Items[i].Checked = check;
249254
}
250255
}
@@ -253,7 +258,7 @@ public static void InvertSelection(object sender = null, EventArgs e = null)
253258
{
254259
for (int i = 0; i < Program.mainForm.streamList.Items.Count; i++)
255260
{
256-
Program.mainForm.ignoreNextStreamListItemCheck = i < (Program.mainForm.streamList.Items.Count - 1);
261+
Program.mainForm.ignoreStreamListCheck = i < (Program.mainForm.streamList.Items.Count - 1);
257262
Program.mainForm.streamList.Items[i].Checked = !Program.mainForm.streamList.Items[i].Checked;
258263
}
259264
}
@@ -262,7 +267,7 @@ public static void CheckTracksOfType(Stream.StreamType type)
262267
{
263268
for (int i = 0; i < Program.mainForm.streamList.Items.Count; i++)
264269
{
265-
Program.mainForm.ignoreNextStreamListItemCheck = i < (Program.mainForm.streamList.Items.Count - 1);
270+
Program.mainForm.ignoreStreamListCheck = i < (Program.mainForm.streamList.Items.Count - 1);
266271
Program.mainForm.streamList.Items[i].Checked = ((MediaStreamListEntry)Program.mainForm.streamList.Items[i].Tag).Stream.Type == type;
267272
}
268273
}

0 commit comments

Comments
 (0)