Wątek i dynamiczna forma

0

Witam.

Pisząc programik napotkałem problem, którego nie wiem jak rozwiązać. W moim programie jest wątek. Jest on umieszczony w dynamicznej formie i podczas próby wykonania kodu w wątku jest błąd w linii w której wątek próbuje dodać coś do komponentu właśnie na dynamicznie tworzonej formie. Może ktoś z Was wcześniej spotkał się z tym problemem i wie co z nim zrobić. Tak dla porządku to jest ta linia w moim programie, w której jest błąd:

 Browser.TreeView1.Items.Add( nil , Browser.Temat(m[0]));

A oto cały kod funkcji do wykonania w wątku:

procedure TSort.Execute;
var
  sl, sl2: TStringList;
  IloscWpisow: Integer;
  M: TMatch;
  i: Integer;
begin
  FreeOnTerminate:= True;
  sl:= TStringList.Create;
  try
    sl.LoadFromFile(ExtractFilePath(Application.ExeName)+Form1.ZalogowanyUzytkownik+'.pam3');
    m:= EReg(sl.Text, '<I>|</I>');
    IloscWpisow:= StrtoInt(M[0]);
    sl2:= TStringlist.Create;
    for i:=0 to iloscWpisow-1 do
    begin
      m[0]:='';
      m:= EReg(sl.Text, '<WPIS'+ IntToStr(i)+'>|</W' + IntTOStr(i) + '>');
      sl2.Text:= m[0];
      m:= Ereg(sl2.Text, '<TEMAT>|</T>');
      Browser.TreeView1.Items.Add( nil , Browser.Temat(m[0])); // <- Błąd
      Browser.TreeView1.Items.Item[Browser.TreeView1.Items.Count-1].StateIndex:=i; // <- możliwe, że tu też jest błąd
    end;
    Browser.Statusbar1.Panels[0].Width:= Browser.StatusBar1.Canvas.TextWidth('Ilość wpisów: ' + IntToStr(IloscWpisow))+15; // <- możliwe, że tu też jest błąd
    Browser.StatusBar1.Panels[0].Text:= 'Ilość wpisów: ' + IntToStr(IloscWpisow); // <- możliwe, że tu też jest błąd
  finally
    sl.Free;
  end;
end;

Za wszelką pomoc dziękuję [soczek] </delphi>

0

Użyj Synchronize(SetProprties)

0

Nie pomogło - chyba, że coś źle zrobiłem. Błędu nie ma ale nic się nie dzieje, tzn wątek jakby śpi

0

Czy chodzi Ci oto, ze jak dziala kod watku to watek macierzysty tez wspoluzytkuje jakies dane ronwoczesnie z nim i przez to wychodza problemy? Jezeli tak, to musisz wprowadzic jakas bezpieczna mozliwosc na wspoluzytkowanie danej. Zastosowac semafory, czy sekcje krytyczne?

0

Zastanow sie dokladnie nad przebiegiem tego, sprobuj ustalic gdzie nastepuje blad, ew ustaw breakpointy w miejscach strategicznych ;) i wykryj czy wszystko na pewno idzie w takiej kolejnosci i z takimi zmiennym jak myslisz :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1