2011. 7. 21. 06:07

"서버 작업 중" 전환 / 다시시도 대화상자 관련

ActiveX 로 작업하다 보면 아래 그림과 같은 대화상자를 직면하게 되는 경우가 종종 있습니다. 

"서버 작업 중 - 다른 프로그램이 사용 중이므로 이 작업을 완료할 수 없습니다. [전환]을 선택하여 사용 중인 프로그램을 활성화하여 문제를 해결하십시오"
"Component Request Pending - This action cannot be completed because the other application is busy. Choose 'Switch To' to activate the busy application and correct the problem"



 이는 사용하고자 하는 ActiveX 컨트롤이 다음과 같은 이유에서 발생할 수 있습니다.

  1. ActiveX 컨트롤이 초기화되기 전에 클라이언트 애플리케이션이 이를 사용하려고 시도할 때
  2. 시스템이 느리거나 동시에 많은 애플리케이션이 동작 중이어서 ActiveX 컨트롤이 응답하지 못하는 경우
  3. ActiveX 컨트롤의 설계에 문제가 있어서 응답이 늦도록 제작되어 있을 때

이것과 관련하여 Microsoft 에서는 아래 코드를 이용하여 응답을 기다리는 시간을 길게 설정하면 된다고 하지만 막상 해보니 위 대화상자가 나타나는 시간만 길어질 뿐 별 효과를 얻지 못했습니다.

BOOL CMyApp::InitInstance() {
     // ...
     AfxOleInit();
     COleMessageFilter * pFilter = AfxOleGetMessageFilter();
     pFilter->SetMessagePendingDelay(5000);
     // ...
}
이 방법 보다는 ActiveX 구현 자체를 신경써서 작성해야 합니다. ActiveX 가 로딩되는 때 필요한 작업을 최소화 하고, 서버와 통신하는 등의 작업은 로딩이 다 된 후에 시작하도록 합니다. 또한 TCP 통신과 같이 어떤 연결을 잡고 있는 경우에는 언제든지 바로 disconnect 가 가능하도록 코드를 작성하는 것이 최선입니다. 바로 이 대화상자가 보일 수 있는 원인들(위에 제시된 3가지)을 능동적으로 의식해서 제거해 주는게 최선이라는 말입니다.

참고:  http://support.microsoft.com/kb/602164/ko