Почему компоненты пользовательского интерфейса не обновляются при обновлении из фонового потока? - PullRequest
1 голос
/ 16 апреля 2010

У меня есть 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;}
     }
}

Я пытался принудительно обновить кнопку, и она не повторялась , пока , но прошло всего пару дней. Проблема, кажется, всплывает, когда захочется, поэтому я не могу быть уверен, что что-то исправляю. Кто-нибудь может пролить свет на это?

1 Ответ

2 голосов
/ 16 апреля 2010

попробуйте позвонить

System.Windows.Forms.Application.DoEvents()

после изменения свойства Enabled кнопки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...