Странные стрнности происходят. Имею код:
public FormSettings()
{
InitializeComponent();
PlayerAdd += OnPlayerAdd;
System.Diagnostics.Debug.WriteLine("settings Create");
}
private void OnDispose()
{
System.Diagnostics.Debug.WriteLine("settings dispose");
}
private void FormSettings_Load(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("settings Load()");
foreach (MonikerItem monikerItem in audioOutputMonikers)
{
comboBoxAudioRenderers.Items.Add(monikerItem.DisplayName);
}
tabControl2.SelectedTab = tabPageVideo;
Left = -1000;
}
private void OnPlayerAdd(ZeratoolPlayerGui z, bool maximized)
{
z.Activated += OnPlayerActivate;
string t = $"Player [{players.Count}]: {z.Title}";
comboBoxPlayers.Items.Add(new PlayerListItem(z, t));
}
private void OnPlayerActivate(object sender)
{
System.Diagnostics.Debug.WriteLine("player activated in form settings");
ZeratoolPlayerGui z = sender as ZeratoolPlayerGui;
int id = FindPlayerInComboBox(comboBoxPlayers, z);
if (comboBoxPlayers.SelectedIndex != id)
{
comboBoxPlayers.SelectedIndex = id;
ListFilters(z.PlayerEngine);//<<<<слишком долго выполняется
RefreshParameters(z);
}
}
private void ListFilters(ZeratoolPlayerEngine playerEngine)
{
comboBoxSplittersAVI.Items.Clear();
comboBoxSplittersAVI.Items.Add("Автоматически (перебор всех вариантов)");
foreach (FilterItem item in playerEngine.filters.mediaSplittersAVI)
{
comboBoxSplittersAVI.Items.Add(item.DisplayName);
}
comboBoxSplittersAVI.SelectedIndex = playerEngine.filters.mediaSplitterAviId + 1;
comboBoxSplittersMP4.Items.Clear();
comboBoxSplittersMP4.Items.Add("Автоматически (перебор всех вариантов)");
foreach (FilterItem item in playerEngine.filters.mediaSplittersMP4)
{
comboBoxSplittersMP4.Items.Add(item.DisplayName);
}
comboBoxSplittersMP4.SelectedIndex = playerEngine.filters.mediaSplitterMp4Id + 1;
comboBoxSplittersOther.Items.Clear();
comboBoxSplittersOther.Items.Add("Автоматически (перебор всех вариантов)");
foreach (FilterItem item in playerEngine.filters.mediaSplittersOther)
{
comboBoxSplittersOther.Items.Add(item.DisplayName);
}
comboBoxSplittersOther.SelectedIndex = playerEngine.filters.mediaSplitterOtherId + 1;
comboBoxVideoDecoders.Items.Clear();
comboBoxVideoDecoders.Items.Add("Автоматически (перебор всех вариантов)");
foreach (FilterItem item in playerEngine.filters.videoDecoders)
{
comboBoxVideoDecoders.Items.Add(item.DisplayName);
}
comboBoxVideoDecoders.SelectedIndex = playerEngine.filters.prefferedVideoDecoderId + 1;
comboBoxVideoRenderers.Items.Clear();
foreach (FilterItem item in playerEngine.filters.videoRenderers)
{
comboBoxVideoRenderers.Items.Add(item.DisplayName);
}
comboBoxVideoRenderers.SelectedIndex = playerEngine.filters.prefferedVideoRendererId;
}
public class FilterItem
{
private Guid guid;
private string name;
public string DisplayName => name;
public FilterItem(Guid guid, string displayName)
{
this.guid = guid;
this.name = displayName;
}
public Guid GetGuid()
{
return this.guid;
}
}
Форма FormSettings
(в которой выполняется этот код) это глобальная статическая переменная. Создаётся сразу. Сейчас не надо о том, почему плохо так делать. Если форма никогда не была показана, то всё чётенько работает. А если форма была уже показана, то указанный метод выполняется ну просто оооочень тормознуто.
Я сначала подумал, что обработчиков на событие Activated
слишком много (или оно несколько раз подряд приходит), но нет. Если закомментировать этот метод, то всё остальное мгновенно выполняется.