Обращение к VCL в DoTerminate потока

Тема в разделе "Delphi - Система", создана пользователем Shouldercannon, 11 сен 2016.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Можно ли в DoTerminate потока обращаться к VCL формы?
    Код (Delphi):
    type

      TMy_Thread = class(TThread)
      private
        { Private declarations }
        s: String;
      protected
        procedure Execute; override;
        procedure DoTerminate; override;
      public
      end;
    ...
    var
      Form2: TForm2;
      My_Thread: TMy_Thread;
    ...
    procedure TForm2.PBBRefreshClick(Sender: TObject);
    begin
      My_Thread := TMy_Thread.Create(True);
      My_Thread.FreeOnTerminate := True;
      My_Thread.Start;
    end;

    procedure TMy_Thread.Execute;
    begin
      s := '1;2;3;4;5;';
      Terminate;
    end;

    procedure TMy_Thread.DoTerminate;
    var
      Item: TListItem;
    begin
      Form2.ListView1.SortType := stNone;
      Form2.ListView1.Items.BeginUpdate;
      Form2.ListView1.Items.Clear;

      while Pos(';', s) <> 0 do
      begin
        Item := Form2.ListView1.Items.Add;
        Item.Caption := Copy(s, 1, Pos(';', s) - 1);
        Delete(s, 1, Pos(';', s));
      end;

      Form2.ListView1.SortType := stBoth;
      Form2.ListView1.Items.EndUpdate;

    // Form2.Show; // Нельзя. Code 1400. недопустимый дескриптор окна
    end;
     
    #1 Shouldercannon, 11 сен 2016
    Последнее редактирование: 11 сен 2016
  2. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    DoTerminate это метод потока, и работает он в контексте потока а не в ГУИ потоке.
    Поэтому обращаться к vcl в нем не безопасно. Отсюда все ваши беды.
    И вообще этот метод служит для запуска обработчика события OnTerminate, если конечно его определил пользователь. И вот он уже работает именно в ГУИ потоке.
     
    Shouldercannon нравится это.
Загрузка...
Похожие Темы - Обращение VCL DoTerminate
  1. Bafomet
    Ответов:
    18
    Просмотров:
    167
  2. proteam
    Ответов:
    7
    Просмотров:
    793
  3. Вовкин
    Ответов:
    0
    Просмотров:
    723
  4. Вовкин
    Ответов:
    0
    Просмотров:
    687
  5. Вовкин
    Ответов:
    0
    Просмотров:
    784

Поделиться этой страницей