Код: Выделить всё
private System.Threading.Timer? startTimer = default;
private WaitIndicator? waitor = default;
private void delegate ChangeVisibilityCallBack(bool visible);
private void Form_Load(object? sender, EventArgs e)
{
startTimer = new(Tick, null, 1000, 0);
}
private void Tick(object? state)
{
ChangeVisibility(true);
...
ChangeVisibility(false);
}
private void ChangeVisibility(bool value)
{
if (InvokeRequired)
{
ChangeVisibilityCallBack cb = new(ChangeVisibility);
this.Invoke(cb, value);
}
else
{
waitor!.Visible = value; //Here is where I'm getting the exception stated below.
if (Visible)
waitor!.BringToFront();
else
waitor!.SendToBack();
waitor!.Refresh();
waitor!.Update();
}
}
WaitIndicator — это пользовательский элемент управления, и я считаю, что именно он вызывает эту проблему. Любая помощь или переписывание будут очень признательны. Любой другой необходимый код я также могу опубликовать.
Я также пробовал просто Invoke, а не this.Invoke, также пробовал Invoke(new Action(()=> { ChangeVisibility(value);}) и все еще получает межпотоковое исключение.
Обзор:
инициализация ожидания
waitor = new() { Text = "Пожалуйста, подождите", Font = new("Gamestation Condensed", 14, FontStyle.Bold) };
Ответ:
Из этого я разобрался в вопросе. Дошло до добавления его в форму. Так как это была переменная control вместо добавленного дизайнером элемента управления, я забыл добавить его в форму и после добавления this.Controls.Add(waitor); ошибка была устранена.
Подробнее здесь: https://stackoverflow.com/questions/790 ... k-delegate
Мобильная версия