Q&A

  • Exception 관련
제가 현재 하고있는작업은 어떠한 통신작업중 그를 중단하기 위한 중단폼을 띄운 상태에서 작업하다가 중단 버튼이 클릭되면 이의 실행을 중지하는 작업을 하고있습니다.

물론 중단 폼이 뜰때, 전역변수를 셋팅하고 중단버튼 클릭시 그 변수의 값을 변경함으로써 이를 해결할 수도 있으나 제가 하고픈 방법은 다음과 같습니다.



// Comm <- 공통모듈

EStopComm = class(exeception);



// Form1 <- 통신 작업을 하는 폼

try

ShowStopMessage; // 중단 폼 보여줌

try

// 통신하면서 데이터를 요청하고, 내려받은 데이터를 처리하는 루틴.

TcpOpen; // 통신 시작

...

...

except

on E : ETcpError do ShowMessage(E.Message); // 통신 오류시 메시지 출력

on E : EStopComm do ; // 중단버튼 클릭시 무시하고 빠져나감.

end;

finally

TcpClose; // 통신 끝

HideStopMessage; // 중단 폼 감춤

end;



// Form2 <- 중단 폼

On Stop Button Click Event;

procedure TStopForm.StopBtnClick(Sender: TObject);

begin

raise EStopComm.Create('통신을 종료하고있습니다.');

end;



위와같이 어떠한 통신작업중 중단버튼이 눌릴경우 중단폼이 exception을 발생시키고,

이 exception을 중단폼을 호출한 프로시져에서 받아서 그를 조용히 무시하고

루틴을 종료한다는 것이지요.



여기서의 문제는 exception 의 결과가 그를 "호출한" 쪽으로 되돌려 진다는 것인데,

여기서는 TStopForm이라는 객체에서 발생했으므로, 그 객체에게 exception이 돌려지고

그에 대한 핸들러가 존재하지않으므로 이것이 자연히 delphi에게로 넘어가서

messagebox에 에러메시지가 뜬다는 것입니다.



그러나 이 중단폼은 여러개의 폼에서 공유해야하므로, 반드시 그것을 처음 호츨한 프로그램에게 되돌려져야 합니다.



많은 고수님들의 조언을 부탁드립니다.

제가 너무 길게 썼나요? 제가 처한 상황을 자세히 알려드려야 할 것 같아서

긴 글이지만 올립니다. 그럼 KDDG의 무궁한 발전을 기원하며 20000....

0  COMMENTS