У меня есть winform с некоторыми кнопками, которые обновляются в обработчике событий. Событие запускается из фонового потока, затем внешний вид устанавливается с помощью метода Invoke. Кнопки просто будут включены или отключены. Что-то случится в непредсказуемое время, хотя:
- Кнопка визуально не изменит внешний вид. Когда он должен быть включен, он все равно выглядит как отключенный
- Нажатие на кнопку «отключено» по-прежнему запускает событие щелчка - как будто оно действительно включено под
- После изменения размера или перемещения формы внешний вид компонента корректно устанавливается включенным.
- Затрагиваются только компоненты, которые обновляются таким образом. Другие компоненты в форме выглядят / ведут себя нормально.
Вот как кнопка обновляется в коде:
public class Form1 :Form
{
void eventFromThread(object sender, CustomEventArgs e)
{
if(e.enable) RunOnUiThread(ShowEnabledView);
else RunOnUiThread(ShowDisabledView);
}
void ShowEnabledView()
{
button1.Enabled = true;
}
void ShowDisabledView()
{
button1.Enabled = false;
}
void RunOnUiThread(MethodInvoker method)
{
try
{
if(InvokeRequired)
{
Invoke(method);
}
else
method.Invoke();
}
catch(ObjectDisposedException)
{ return;}
catch(InvalidOperationException)
{return;}
}
}
Я пытался принудительно обновить кнопку, и она не повторялась , пока , но прошло всего пару дней. Проблема, кажется, всплывает, когда захочется, поэтому я не могу быть уверен, что что-то исправляю. Кто-нибудь может пролить свет на это?