Я использую IdThreadComponent для выполнения простой загрузки ftp на сервер.IdThreadComponent messes Пользовательский интерфейс
Код для загрузки FTP выглядит следующим образом:
procedure TfrmNoticeWindow.IdThreadComponent1Run(
Sender: TIdCustomThreadComponent);
begin
IdFtp1.Host := 'ip';
IdFtp1.Username := 'user';
IdFtp1.Password := 'pass';
try
IdFtp1.Connect;
except
begin
msgDlgBox.MessageDlg('Could not connect!', mtError, [mbOk], 0);
publishing := false;
end;
end;
IdFtp1.Put(txtPath.text, file_name);
IdFtp1.Quit;
IdFtp1.Disconnect;
End;
FtpWorkEnd выглядит следующим образом:
procedure TfrmNoticeWindow.IdFTP1WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
var
Params : TStringList;
Resp : String;
begin
IdThreadComponent1.Active := false;
Params := TStringList.Create;
Params.Add('enotice_publish='+packet);
if (aborted = true) then
begin
IdFtp1.Quit;
idFtp1.Disconnect;
aborted := false;
uploadGauge.Value := 0;
uploadGauge.Visible := false;
frmNoticeWindow.Height := 512;
btnUpload.Caption := 'Publish';
exit;
end;
Resp := doPost('url', params);
if (Resp = 'Notice published successfully!') then
msgDlgBox.MessageDlg(Resp, mtInformation, [mbOk], 0)
else
msgDlgBox.MessageDlg(Resp, mtError, [mbOk], 0);
frmNoticeWindow.Refresh;
uploadGauge.Value := 0;
uploadGauge.Visible := false;
frmNoticeWindow.Height := 512;
btnUpload.Caption := 'Publish';
publishing := false;
txtPath.Text := '';
txtNoticeHeader.Text := '';
end;
Когда загрузка будет завершена, HTTP POST сделан и в ответ я получаю строка [Success/Failure] с сервера.
Проблема заключается в том, что после этого MessageDlg компоненты моего приложения превращаются в белые блоки, и элементы управления приложения больше не могут использоваться.
Я попробовал обновление() в форме, но это не помогло.
Я использую Business Skin Forms для защиты своего приложения, а компонент нити заполняет форму после закрытия.
Вы должны сделать весь пользовательский интерфейс работает над потоком пользовательского интерфейса –
Пожалуйста, не помещайте информацию о тегах в заголовок. Вы добавили тег delphi; нет необходимости дублировать его в заголовке, а [] в области плитки имеют конкретное значение здесь. Благодарю. –
ok @KenWhite. После того, как я остановил idThreadComponent, я должен быть в основном потоке, не так ли? Если нет, куда я могу поместить код UI, связанный с UI? – Priyabrata