2013-04-11 1 views
0

1) Я нажимаю кнопку запуска подключения в своей клиентской программе. Я успешно установил backcolor кнопки пуска в красный цвет.Кнопка BackColor не изменится в Backgroundworker Завершенный метод

2) Когда соединение TCP завершено, отправляется сообщение регистрации, и оно успешно меняет цвет кнопки на желтый.

3) Сервер отправляет регистрацию ACK обратно клиенту и обрабатывается в фонового работника (BGW). BGW устанавливает логическую переменную SetConnectButton так, что она известна, регистрация прошла успешно, а затем завершается.

4) Выполняется функция RunWorkerCompleted. Окно отладки отображает «Лайм», как должно, но цвет кнопки не изменяется. Вот код RunWorkerCompleted.

static private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 
     if (SetConnectButton) 
      { 
      Debug.WriteLine("Lime"); 
      SetConnectButton = false; 
      UIMain.btnServerConnect.BackColor = System.Drawing.Color.Lime; 
      } 
     }//close WorkerCompleted 

Как я понимаю, RunWorkerCompleted работает в потоке пользовательского интерфейса, так что это должно работать, как есть. Использование Invoke не имело никакого значения, хотя я, возможно, не сделал этого правильно.

Любые подсказки?

+0

Вы пытались установить точку останова в этом обработчике событий? Вы уверены, что «SetConnectButton» прав? –

+0

Да, SetConnectButton истинно, так как на выходе Debug появляется слово «Lime». BTW, UIMain устанавливается в «this» в конструкторе для основной формы, где находится данная кнопка. –

+0

Где это написано на msdn, что runworkercompleted работает в потоке пользовательского интерфейса? – Ikaso

ответ

0

Проблема решена с использованием метода Context.Post при вызове функции, которая записывает пользовательский интерфейс.

 Смежные вопросы

  • Нет связанных вопросов^_^