Microsoft MVP성태의 닷넷 이야기
스크립트: 2. JScript에서의 Blocking 동작을 막아주는 COM 메서드 [링크 복사], [링크+제목 복사],
조회: 21733
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




... 181  182  183  184  185  186  187  [188]  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
259정성태6/1/200616188    답변글 개발 환경 구성: 2.2. Vista VPC에 터미널 서비스 - 원격 접속
253정성태6/1/200614559기타: 14. .NET 2.0 이 지원되는 NDoc 2.0 을 배포합니다.
251정성태6/1/200617538오류 유형: 4. [OS 지원 API] SHParseDisplayName과 Windows 2000
252정성태6/1/200617441    답변글 오류 유형: 4.1. NET BCL 에서 제공되는 FolderBrowserDialog [2]
249정성태6/1/200616789.NET Framework: 71. VB.NET 이외의 언어에서 My 네임스페이스 사용
250정성태6/1/200619480    답변글 .NET Framework: 71.1. VB.NET 이외의 언어에서 My 네임스페이스 사용
248정성태6/1/200617656기타: 13. Code Center Premium에서 Win32 API 소스 찾기
245정성태6/1/200625305오류 유형: 3. [C# / VC++] error C2146: syntax error : missing ';' before identifier 'GetType'
247정성태5/3/200622567    답변글 .NET Framework: 3.1. Interface를 사용하면. [1]
242정성태6/1/200623087오류 유형: 2. [COM+] CreateObject 와 HTTP 500 - Internal server error
243정성태6/1/200620567    답변글 오류 유형: 2.1. [COM+] Resolve Partial Assembly failed for Microsoft.VC80.CRT.mui
244정성태6/1/200621841    답변글 오류 유형: 2.2. [COM+] Server object error 'ASP 0178 : 80070005'
240정성태6/1/200619702스크립트: 9. setTimeout 과 jscript/vbscript 혼용 문제
239정성태6/1/200621025COM 개체 관련: 18. Internet Explorer는 Out-of-process COM 개체입니다.
238정성태6/1/200622882개발 환경 구성: 1. batch 파일에서 실행한 exe에서 batch 실행 문맥의 환경 변수 설정 [3]
236정성태6/1/200643658오류 유형: 1. [.NET COM+] UnauthorizedAccessException: 레지스트리 키 HKEY_CLASSES_ROOT\.... 에 대한 액세스가 거부되었습니다
235정성태6/1/200618300VS.NET IDE: 39. VS.NET 2003/2005에서도 제공되는 VS 6.0 MFC ClassWizard
234정성태4/14/200618021VC++: 24. error C2039: 'pOleStr' : is not a member of '_STRRET'
233정성태4/13/200617420.NET Framework: 70. Response.ContentType 과 Response.AddHeader( "Content-Type", "..." ) 의 차이
232정성태4/13/200617130.NET Framework: 69. Reusing C# Source Code Across Multiple Assemblies
231정성태4/13/200617574Team Foundation Server: 4. How to rename a Team Foundation Server
229정성태10/17/200619106.NET Framework: 68. Feb CTP 에서 동작하는 "Save XPS Document page(s) to .bmp" 예제 소스
230정성태4/13/200619333    답변글 .NET Framework: 68.1. -01 MSDN Magazine XPS Document 소스를 Feb CTP로 수정한 버전파일 다운로드1
228정성태4/13/200615748Team Foundation Server: 3. MSBUILD : warning : Visual Studio Team System for Software Testers or Visual Studio Team System for Software Developers is required to run tests as part of a Team Build.
227정성태4/13/200617362Team Foundation Server: 2. TFS 빌드 오류 유형 - MSBUILD: warning : Specified cast is not valid
226정성태4/13/200615333Team Foundation Server: 1. TFS 오류 유형 - TF50608: Unable to retrieve information for security object
... 181  182  183  184  185  186  187  [188]  189  190  191  192  193  194  195  ...