none
Async Operation 도중 다른 Operation Block 시키는 방법 관련하여 RRS feed

  • 질문

  • 안녕하세요 저는현재 VS Express 2010 + WM7.1 개발 Toolkit + .Net 4.0 + C#으로 프로그램 개발중입니다.

    그런데 한가지 문제점이 있어 이렇게 문의를 드립니다.

                if (mRoadMapResource == null)
                {
                    cnn = new TileMapResourceXML(CMapTileInfo.ROAD_MAP);
                    cnn.Start_Xmlparsingdata();
                    mRoadMapResource = cnn.Get_Xmlparsingdata();
                }

            [위의 함수에서 호출]

            public void  Start_Xmlparsingdata()
            {          
                WebClient xmlParser = new WebClient();
                xmlParser.DownloadStringCompleted +=new DownloadStringCompletedEventHandler(xmlParser_DownloadStringCompleted);
                xmlParser.DownloadStringAsync(new Uri(mapResource_url, UriKind.RelativeOrAbsolute));             
            }

    현재 프로그램에서 Web에 있는 xml 파일을 비동기로 다운 받아 다운이 완료되면 완료에 대한 이벤트 핸들러가 실행되게 해놨습니다.

    문제는 비동기 이다보니 DownloadStringAsync 실행되고 바로 원래 콜한 함수의 아래 함수가 실행되어 Parsing한 데이터가 아무것도 설정이 되지 않습니다.

    비동기 이더라도 순차적으로 실행 시키는 방법이 없나요?

    즉, 비동기를 실행시킨 후 비동기 루틴이 다 실행 완료될때까지 기다리게 하는 방법이 없나요?

    MSDN에서 찾아봤더니 있기는 한건 같은데 VS에서추가할려고 하니 참조하는 부분이 없다고 하여 ...추가 안되어서 답답하네요..

     

     

     

     

    2011년 12월 3일 토요일 오전 6:11

모든 응답

  • 안녕하십니까? Eric.Kim

    Microsoft TechNet Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “Async Operation 도중 다른 Operation Block 시키는 방법 관련하여에 대한 답변을 드리겠습니다.

     

    제 생각에는 두 가지 해결 방안이 있습니다.

    1.     Event Handler에서 다음에 호출되는 함수를 호출을 합니다.

    2.     Flag를 선언을 해서 While문을 이용해서 Main Thread를 잠시 중단하는 방법을 추천해드립니다.

     

    위의 방법은 임시 방법일 수 있습니다. 다른 방법을 원하시면 Sequencial Asynchrouns를 검색해서 관련 Class를 작성해서 사용하시기 바랍니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 12월 5일 월요일 오전 1:42
    중재자
  • 안녕하십니까? Eric.Kim

    Microsoft MSDN Forum사이트를 방문해 주셔서 감사합니다.

     

    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.

    2012년 1월 18일 수요일 오전 4:55
    중재자