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 не имело никакого значения, хотя я, возможно, не сделал этого правильно.
Любые подсказки?
Вы пытались установить точку останова в этом обработчике событий? Вы уверены, что «SetConnectButton» прав? –
Да, SetConnectButton истинно, так как на выходе Debug появляется слово «Lime». BTW, UIMain устанавливается в «this» в конструкторе для основной формы, где находится данная кнопка. –
Где это написано на msdn, что runworkercompleted работает в потоке пользовательского интерфейса? – Ikaso