자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey XE8 작업진행중 프로그래스 표시
2015.09.22 15:24
본 게시판 사용시 당부 사항
* 이 게시판은 누구나 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
XE8 작업진행중 프로그래스 표시
안드로이드나 아이폰 개발시.. 예를 들어, 내부적으로 화면 UI 관련 작업 (약 3초) 을 한다고 할때에
진행중 표시를 AniIndicator 를 사용해서 진행 애니메이션을 보여주려고 하면,, 애니메이션이 보이지않고
멈춘상태로 보여집니다..
아마도 메인쓰레드가 동작중이기에 그 동작이 끝나야 애니메이션이 동작하기 떄문이라고 생각이됩니다..
물론 예를들어, indy를 사용하여 원격파일을 다운로드 한다던지하는것은, 가능합니다. 메인쓰레드가 아닌
서브쓰레드를 쓸경우에는 메인쓰레드에서 서브쓰레드 작업이 끝날때까지, 프로그래스를 보여주는것이
가능하겠지요..
허나, 메인쓰레드가 서브쓰레드를 안쓰고 스스로 어떤 2~5초정도의 작업을 할경우에, 프로그래스를
보여줄 방법이 있는지 궁금합니다.
2~5초정도의 작업은, 여러가지가 있을수 있겠지만.. edit1 컴포넌트를 1000개 만든다던지..기타 등등의 작업입니다.
앱작업하다보니, 이런경우가 생기더군요.....
왠만하면 외부컴포넌트등의 또눈 네이티브 컨트롤의 힘을 안빌리고 자체적으로 해결하고 싶네요.
(디자인문제등..)
Firemonkey XE8 작업진행중 프로그래스 표시
2015.09.22 15:24
본 게시판 사용시 당부 사항
* 이 게시판은 누구나 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
XE8 작업진행중 프로그래스 표시
안드로이드나 아이폰 개발시.. 예를 들어, 내부적으로 화면 UI 관련 작업 (약 3초) 을 한다고 할때에
진행중 표시를 AniIndicator 를 사용해서 진행 애니메이션을 보여주려고 하면,, 애니메이션이 보이지않고
멈춘상태로 보여집니다..
아마도 메인쓰레드가 동작중이기에 그 동작이 끝나야 애니메이션이 동작하기 떄문이라고 생각이됩니다..
물론 예를들어, indy를 사용하여 원격파일을 다운로드 한다던지하는것은, 가능합니다. 메인쓰레드가 아닌
서브쓰레드를 쓸경우에는 메인쓰레드에서 서브쓰레드 작업이 끝날때까지, 프로그래스를 보여주는것이
가능하겠지요..
허나, 메인쓰레드가 서브쓰레드를 안쓰고 스스로 어떤 2~5초정도의 작업을 할경우에, 프로그래스를
보여줄 방법이 있는지 궁금합니다.
2~5초정도의 작업은, 여러가지가 있을수 있겠지만.. edit1 컴포넌트를 1000개 만든다던지..기타 등등의 작업입니다.
앱작업하다보니, 이런경우가 생기더군요.....
왠만하면 외부컴포넌트등의 또눈 네이티브 컨트롤의 힘을 안빌리고 자체적으로 해결하고 싶네요.
(디자인문제등..)
아래와 같은 형식으로 구현하면 되겠네요.
procedure TForm1.Button1Click(Sender: TObject);
begin
AniIndicator1.Enabled := True;
//----------------------------------------------
//익명쓰레드 사용
TThread.CreateAnonymousThread(procedure ()
begin
Sleep(5000); // <=== 작업
TThread.Synchronize (TThread.CurrentThread, procedure ()
begin
memo1.Lines.Add('2번완료'); // <-------- 쓰레드 내부에서는 컴포넌트의 UI작업은 필히 Synchronize 내부에서 해야한다.)
AniIndicator1.Enabled := False;
end);
end).Start;
//----------------------------------------------
memo1.Lines.Add('1번완료');
end;