Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Не отрисовывается форма в потоке
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Leon Leon вне форума
Member
 
Сообщений: 262
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.10.2002
По умолчанию Не отрисовывается форма в потоке - 07.02.2014, 20:50

Доброе время суток! Проблема в том что форма открывающаяся в потоке не прорисовывается. В форме ничего нет только GradientBar показывающий анимацию, и Label с сообщением. Если использовать ShowModal() для открытия формы то все нормально выидно но форма не закрывается. Я понимаю что VCL компоненты потоконебезопасны но я никак к элемантам формы не обращаюсь в потоке просто показал форму и потом закрыл и все. Привожу код

Оснвной поток
cpp Код:
void __fastcall TOptionMainForm::TestConnectionButtonClick(TObject *Sender)
{
    if(DataForm->Connection->Connected)
    {
        DataForm->Connection->Close();
        PerformNotification(NoticeLabel,SERVER_DISCONNECTION);
        FormActivate(this);
    }
    DataForm->FillConnectonParams();
    ProcessAnimation *pa = new ProcessAnimation(false,WAIT_FOR_CONNECT);   //  Нить создали и пытаемся подключиться
    try{
        DataForm->Connection->Open();
        pa->Terminate();
        PerformNotification(NoticeLabel,SERVER_FOUNDED);
    }
    catch(...)
    {
        PerformNotification(NoticeLabel,CONNECTION_HAS_FAULT);
        pa->Terminate();
    }
    this->SetFocus();
}

И код потока
cpp Код:
__fastcall ProcessAnimation::ProcessAnimation(bool CreateSuspended, UnicodeString Message)
    : TThread(CreateSuspended)
{
    this->Priority = tpLower;
    FreeOnTerminate = true;
    ProcessForm = new TProcessForm(Message);
    ProcessForm->Show();
    ProcessForm->BringToFront();

}

//---------------------------------------------------------------------------
void __fastcall ProcessAnimation::Execute()
{
    Synchronize(Repaint);
    while(!Terminated)
    {
        if(Terminated) break;
    }
    ProcessForm->Close();
}
//---------------------------------------------------------------------------

void __fastcall ProcessAnimation::Repaint(void)
{
    ProcessForm->ProgressGradient->Visible = true; // это я уже от безысходности
    ProcessForm->MessageLabel->Visible = true;
}
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 07.02.2014, 21:55

Любая работа с формами возможна только из главного потока.
Ответить с цитированием
  (#3 (permalink)) Старый
Leon Leon вне форума
Member
 
Сообщений: 262
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.10.2002
По умолчанию 07.02.2014, 23:41

Спасибо, все понятно, то есть придется сделать наоборот форму показывать в главном потоке а подключаться к базе в порожденном. Еще раз спасибо тему можно закрыть.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не закрывается форма в отдельном потоке Leon C++ Builder 1 07.02.2014 20:41
Форма, внутри еще форма. помогите!!! Nadej C++ Builder 2 04.10.2011 16:03
Работа с Suspend/Resume в потоке Верещагин C++ Builder 4 17.08.2009 11:51
Таймер в потоке как создать Makavely C++ Builder 5 15.03.2008 12:12
Прогресс бар в отдельном потоке Андрейка C. Visual C++ 9 16.11.2006 20:06
Работа в потоке ruth С/С++ 1 15.05.2006 17:16
Проверка наличия данных в потоке Satae С/С++ 0 31.03.2005 16:33
Как создать процедуру в отдельном потоке Алексеев Николай Delphi 7 09.02.2005 04:03
Как в потоке формировать послание imported_AlterEgo WinAPI 1 25.01.2005 18:24
Кэширование команд для DC в потоке под WinXP RoboTact Visual C++ 4 17.08.2004 15:50
Глобальные переменные в потоке Dencraft WinAPI 5 01.03.2004 06:03
Задача о максимальном потоке Anonymous Алгоритмы 6 25.12.2003 22:49



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов