W celu uaktualnienia danych w elementach formy (buttony, textboxy etc.) z poziomu wątku (background worker) używam zdarzenia ProgressChanged.
Robię to w ten sposób:
W wątku (background worker) tworzę obiekt klasy zdefiniowanej przeze mnie:
CProgress^ CP_ProgChange = gcnew CProgress();
, który to obiekt będzie przechowywał dane, których chcę użyc do aktualizowania elementów formy (j.w.)
przypisuję odpowiednie wartości:
CP_ProgChange->SetValue(S_RecvBuf);
nastepnie poslugujac sie metoda ReportProgress(...) przekazuje je do funkcji obslugi zdarzenia:
LoopThread->ReportProgress(10, CP_ProgChange);
W ktorej to funkcji tworzę nowy obiekt klasy CProgress, któremu przypisuję "wartość" przekazanego obiektu:
CProgress^ CP_ProgChange = static_cast <CProgress^> (e->UserState) // !!!!!;
i aktualizuję:
this->tBox_Recv->Text = CP_ProgChange->S_RecvBuff;
W związku z powyższym:
- Czy ten sposób postępowanie jest prawidłowy ? (najwięcej watpliwosci budzi u mnie linijka oznaczona wykrzyknikami)
- Czy istnieje jakiś sposób, aby odwoływać się do elementów przekazanego obiektu bez konieczności jego kopiowania ?