먼저이벤트에 Close
이벤트가 발생하여 양식을 닫습니다. 그것을 제거하면 그 문제를 해결할 수 있습니다.
스레드를 시작하고 중지하고 싶다고 생각하면 몇 가지 작업을 수행해야합니다. 당신의 Button1Click
핸들러에서,
type
TForm1 = class(TForm)
...
private
FServiceThread: TServiceThread;
...
end;
지금 :
첫째, 당신은 스레드에 대한 참조를 유지하므로 양식 정의에 새로운 변수를 추가 할 필요가
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Enabled := False;
try
if FServiceThread = nil then
FServiceThread := TServiceThread.Create;
if (Button1.Caption = '&Start') then
begin
Button1.Caption := '&Stop';
FServiceThread.Start;
end
else
begin
Button1.Caption := '&Start';
FServiceThread.Terminate;
end;
finally
Button1.Enabled := True;
end;
end;
주 당신 스레드의 FreeOnTerminate
속성을 True
(종료 될 때 자동으로 스레드를 해제)으로 설정하거나 수동으로 양식의 OnClose
또는 OnDestroy
이벤트에서 직접 해제해야합니다. FreeOnTerminate
을 사용하는 경우 스레드의 OnTerminate
이벤트에 대한 이벤트를 추가하고 을 설정하여 다음에 Start
버튼을 클릭 할 때 새 이벤트를 만들 수 있도록해야합니다.
button1.Caption : = '& Start'; 명령문 바로 앞에 있기 때문에 양식이 닫힙니다. 무엇을 멈추고 시작하려고합니까? 서비스 스레드입니까? –
나는 그것에 대해 모른다, 나의 친구는 그 코드를 준다 나는 그가 나에게주는 코드가 아직도 버그를 가지고 있다고 생각한다, 미안 나는 단지 델파이와 2 주간의 공부를한다, 나는 당신을 혼란스럽게 만들면 너무 미안하지만 너무 혼란 스럽다. _- – rihsano