C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[5295] Re:[질문]NMFTP 컴포넌트...
박지훈.임프 [cbuilder] 2948 읽음    2001-02-08 14:41
태진상 님이 쓰신 글 :
: 안녕하세요... 또 한번 이렇게 질문을 올리게 되는군요.... 임프님 감사합니다. 저번 답변.. 많은 도움이 되었습니다.
:
: 이번에는 제가 사용법을 몰라서인지 몰라도... NMFTP의 List() 메쏘드에 대한 질문입니다. 이 메쏘드를 사용하였고... OnListItem 함수에서 listbox에 아이템들이 나열되었는데... ChangeDir 메쏘드를 사용하여 디렉토리를 옮겨 아이템들이 좀 많은 곳을 가면 Item들이 나왔는데.. 그 이후에 다시 ChangeDir를 사용하여 디렉토리를 옮기면 List 메쏘드가 처리되어 있다고 에러가 나옵니다.
:
: 그래서 플래그를 사용하여 List() 메쏘드가 처리 완료 되면 true를 주었는데... 역시 LIst() 메쏘드가 처리가 되질 않더군요... 아이템들이 좀 많은 곳을 가면 ... 그 이유를 알고 싶어.. 이렇게 질문을 올립니다.... 답변을 꼭 주십시용...


임펠리테리입니다.

FastNet 컴퍼넌트는 요즘 거의 안쓰지만.. 아마도 TNMFtp 컴퍼넌트가 비동기로 동작하기 때문일겁니다. List 메소드의 내부가 별도의 쓰레드로 동작하든지, 혹은 내부에 Application->ProcessMessages()가 있다면 비동기로 동작할 수 있습니다. 비동기로 동작한다는 말은, 다시 말해서 List() 메소드를 호출한 후 모든 리스트를 받아온 후 이벤트를 처리하는 것이 아니라 바로 다른 이벤트들을 처리할 수 있는 상태가 됩니다. 그런데, List 동작이 아직 안끝난 상태에서 다시 List()를 호출하게 되면 에러를 내게 되는 것일 겁니다. 추리였습니다.

만약 이같은 경우라면.. List()를 호출한 직전에 디렉토리를 변경하는 역할을 하는 버튼(혹은 리스트박스를 더블클릭하는 경우라면 리스트박스)를 disable 시켜놓고, 리스팅이 다 끝난 후, 즉 OnSuccess나 OnError 등의 이벤트 핸들러에서 다시 enable 시키면 되겠지요.

이런 경우, 넷마스터 컴퍼넌트에 포함된 헬프에는 이런 내용이 나오지 않으므로 소스를 뒤져보는게 확실한데, 넷마스터는 상용 컴퍼넌트이기 때문에 소스가 없습니다. 한번 막히게 되면 해결책이 막막하게 되지요. 그래서, 넷마스터보다는 소스까지 공개되어 있는 Indy나 ICS등의 다른 컴퍼넌트를 사용하는 것이 좋습니다. (두가지 모두 여기 자료실에 있습니다.)

그럼 참고하시길...

+ -

관련 글 리스트
5277 [질문]NMFTP 컴포넌트... 태진상 2740 2001/02/08
5295     Re:[질문]NMFTP 컴포넌트... 박지훈.임프 2948 2001/02/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.