Microsoft MVP성태의 닷넷 이야기
스크립트: 2. JScript에서의 Blocking 동작을 막아주는 COM 메서드 [링크 복사], [링크+제목 복사],
조회: 26225
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

많이들 경험하셨을 것 같은데요..

예를 들어, XML 내용에서 노드 따라서 쭉 출력을 해줄 때를 가정해보
면,

var xmlNodes = xmlDoc.selectNodes( "test/lists" );
var nLength = xmlNodes.length;
var aNode;
for ( var i = 0; i < nLength; i ++ ) {
  aNode = xmlNodes.item(i);
  divOutput.appendChild( aNode.text );
}

위와 같이 출력을 할때, HTML을 처리하는 IE의 스레드가 단일이기
때문에 divOutput에 변화를 가하더라도 중간중간 나타나는 것이 아
닌 마지막 최후로 작업이 끝난 다음에 화면에 결과가 나타나게 되죠.

만약, 위의 작업이 1000개 2000개 정도 되면 정말 지루할 텐데요.

이런 경우 간단한 Win32 API로 된 COM 메서드를 제작해서 중간중간
에 호출을 해주면 됩니다.
그 메서드는

STDMETHODIMP CTest::RelayEvents(LONG nCount)
{
MSG msg;

while ( nCount > 0 ) {
while ( ::PeekMessage( &msg, NULL, 0, 0,
PM_REMOVE ) ) {
::TranslateMessage( &msg );
::DispatchMessage( &msg );
nCount --;
}
nCount --;
}
return S_OK;
}

위의 COM 메서드를 FOR 루프의 중간중간에 호출을 해주면 됩니다.
for ( ... ) {
  i_message.RelayEvents( 50 );
}

그럼, 기대하던 대로 출력이 이어서 화면에 바로바로 나타나게 됩니다.

한 가지 단점이라면, 해당 COM 객체를 내려받아야 한다는 것인데, 기
존 인증서 첨부된 COM 객체가 있다면 거기에 위의 메서드를 하나 추가
시켜 준후, JScript에서 사용하면 될 것입니다.









[최초 등록일: ]
[최종 수정일: 6/27/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 61  62  63  64  65  66  [67]  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
12357정성태10/7/202020274오류 유형: 663. 이벤트 로그 - The storage optimizer couldn't complete retrim on New Volume
12356정성태10/7/202035833오류 유형: 662. ASP.NET Core와 500.19, 500.21 오류 (0x8007000d)
12355정성태10/3/202018403오류 유형: 661. Hyper-V Linux VM의 Internal 유형의 가상 Switch에 대한 IP 연결이 되지 않는 경우
12354정성태10/2/202033523오류 유형: 660. Web Deploy (msdeploy.axd) 실행 시 오류 기록 [1]
12353정성태10/2/202021459개발 환경 구성: 518. 비주얼 스튜디오에서 IIS 웹 서버로 "Web Deploy"를 이용해 배포하는 방법
12352정성태10/2/202024055개발 환경 구성: 517. Hyper-V Internal 네트워크에 NAT을 이용한 인터넷 연결 제공
12351정성태10/2/202021251오류 유형: 659. Nox 실행이 안 되는 경우 - Unable to bind to the underlying transport for ...
12350정성태9/25/202027723Windows: 175. 윈도우 환경에서 클라이언트 소켓의 최대 접속 수 [2]파일 다운로드1
12349정성태9/25/202021157Linux: 32. Ubuntu 20.04 - docker를 위한 tcp 바인딩 추가
12348정성태9/25/202021332오류 유형: 658. 리눅스 docker - Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
12347정성태9/25/202037224Windows: 174. WSL 2의 네트워크 통신 방법 [4]
12346정성태9/25/202019580오류 유형: 657. IIS - http://localhost 방문 시 Service Unavailable 503 오류 발생
12345정성태9/25/202020567오류 유형: 656. iisreset 실행 시 "Restart attempt failed." 오류가 발생하지만 웹 서비스는 정상적인 경우파일 다운로드1
12344정성태9/25/202022597Windows: 173. 서비스 관리자에 "IIS Admin Service"가 등록되어 있지 않다면?
12343정성태9/24/202034132.NET Framework: 945. C# - 닷넷 응용 프로그램에서 메모리 누수가 발생할 수 있는 패턴 [5]
12342정성태9/24/202022415디버깅 기술: 171. windbg - 인스턴스가 살아 있어 메모리 누수가 발생하고 있는지 확인하는 방법
12341정성태9/23/202019675.NET Framework: 944. C# - 인스턴스가 살아 있어 메모리 누수가 발생하고 있는지 확인하는 방법파일 다운로드1
12340정성태9/23/202019554.NET Framework: 943. WPF - WindowsFormsHost를 담은 윈도우 생성 시 메모리 누수
12339정성태9/21/202019493오류 유형: 655. 코어 모드의 윈도우는 GUI 모드의 윈도우로 교체가 안 됩니다.
12338정성태9/21/202021476오류 유형: 654. 우분투 설치 시 "CHS: Error 2001 reading sector ..." 오류 발생
12337정성태9/21/202021135오류 유형: 653. Windows - Time zone 설정을 바꿔도 반영이 안 되는 경우
12336정성태9/21/202025047.NET Framework: 942. C# - WOL(Wake On Lan) 구현
12335정성태9/21/202035792Linux: 31. 우분투 20.04 초기 설정 - 고정 IP 및 SSH 설치
12334정성태9/21/202020203오류 유형: 652. windbg - !py 확장 명령어 실행 시 "failed to find python interpreter"
12333정성태9/20/202020613.NET Framework: 941. C# - 전위/후위 증감 연산자에 대한 오버로딩 구현 (2)
12332정성태9/18/202023101.NET Framework: 940. C# - Windows Forms ListView와 DataGridView의 예제 코드파일 다운로드1
... 61  62  63  64  65  66  [67]  68  69  70  71  72  73  74  75  ...