CHOU

[MSRDS] CCR에서 ITask가 하는 일에 대해서 알아보기 본문

Tech/Microsoft Products

[MSRDS] CCR에서 ITask가 하는 일에 대해서 알아보기

chobabo 2009. 3. 18. 22:49

 CCR(Concurrency and Coordination Tuntime)에서는 원하는 기능 즉 Task를 ITask 라는 형식으로 정의합니다. 정의 된 ITask 형식의 Data를 DispatcherQueue에 넣으면 Dispatcher가 해당 ITask를 읽어서 해당 기능을 처리합니다. 오늘은 ITask에 대해서 http://cafe.naver.com/msrskorea 예문을 통해 알아보겠습니다.

1. 우선 Visual Studio 2008 C# WindowsApplication을 생성해 줍니다. 이름은 적당한 형식으로 지정해 주시면 됩니다.


그림1. 프로젝트 생성 화면


2. 레퍼런스(Reference) 추가를 선택하여 Microsoft.Ccr.Core.dll 을 추가해 줍니다.


그림2. .NET 레퍼런스 화면


3. 참조된 Microsoft.Ccr.Core.dll 파일을 사용하기 위해 소스 상단에 using을 사용하여 정의해 줍니다.


그림3. using 추가 화면


4. ITask가 실행되는 결과를 보기 위해 폼(Form)에 버튼 2개와 리스트 박스 1개를 추가해 줍니다.


그림4. 폼 생성 화면


5. 버튼1에 아래와 같은 소스를 입력해 줍니다. 아래 소스를 간략히 생각해 보면 Dispatcher와 DispatcherQueue를 정의하고, Handler와 ITask를 정의하는 내용인 듯 합니다.


그림5-1. 코드 화면

dq.Enqueue(myTask); 입니다^^. 오타가 난 부분을 수정합니다.

 ITask는 CCR이 처리하는 첫번째 과정인 무엇인가 하는 일(Task)를 생성하는 것이기 때문에 이 예제 소스는 Handler를 사용하는거 같습니다. 직접 Handler를 처리하지 못하는 것은 DispatcherQueue는 ITask 형식만 받아 들이기 때문에, Handler 를 ITask로 변환하여 DispatcherQueue로 변환하여 등록 시킨거 같습니다.   컴파일 해서 실행하면 다음과 같은 화면의 결과가 나타납니다.


그림5-2. 버튼 1 실행결과 화면


6. 버튼2에 아래의 코드를 추가해 줍니다. 


그림6-1. 버튼 2 코드화면


버튼1의 소스와 비슷한 듯 약간의 차이가 있는데 버튼 1의 Anonymous 메소드 대신에 별도로 정의된 Handler 형식의 메소드가 실행이 됩니다. 버튼이 눌려질 때마다, ITask가 생성되어 DispatcherQueue에 등록이 되고 DIspatche가 실행될때 해당 Handler Method가 호출 됩니다. 결과 화면은 아래와 같습니다.


그림6-2. 버튼2 실행 결과 화면


7. 아래는 소스코드를 실행한 영상 입니다. 혹시 위의 방법으로 수행하여 결과가 나오지 않을 경우 참고해 주세요.

영상1. 코드 실행 영상

위의 내용에 틀린점이 있거나 궁금한 점이 있으시면 연락 주세요.


참고자료
1. http://cafe.naver.com/msrskorea (MSRDS 네이버 카페)

2. 실행 소스 코드