쓰레드 내부에서
ShowMessage는 띄울때 문제가 생겨서요..
FTP로 파일 전송을 하는 프로그램을 만들때.
파일 전송시 윈도 핸들을 ftp로 넘어가는 문제를
해결하기 위해서 쓰레드를 사용하였습니다.
쓰레드 내부에서
put을 이용해서 파일을 전송한후
전송완료 메시지를
ShowMessage('파일전송을 완료하였습니다.');
라는 메시지를 뛰워주고
쓰레드가 종료되도록 만들었습니다.
procedure TManualTransThread.Execute;
begin
try
FreeOnTerminate := true;
Client.Put(SrcPath+'\'+FileName, FileName);
ShowMessage('파일전송을 완료하였습니다.');
except
Terminate;
end;
end;
쓰레드의 Execute 함수 부분입니다..
그런데 어떤 때는 정상 작동하고
어떤때는 메모리 참조 에러 메시지가 막뜨고
어떤 때는 윈도 화면이 넘어가는 엄청난 크기의
메시지 박스가 떠버리는 경우가 발생하네요..
이유가 무엇인지 알려주세요. ^^
==> 안녕하세요 BaSTaD 입니다..
Thread 내부에서 UI관련 작업을 하실때는 Synchronize 를 반드시 해야합니다. 즉 메인 Thread가 아닌 Work Thread에서 말이죠.. UI 는 메인쓰레드에서만 정상적으로 동작합니다.. 되따 않되어따 그러는 이유이지요..
아래처럼 해보세요..
procedure TManualTransThread.DoEndOfWork;
begin
ShowMessage('작업 종료');
end;
.... Execute;
begin
....
Synchronize(DoEndOfWork);
end;
KDDG 만수 ㅔ 이 ~~~