[WPF] 공공데이터 포털 API 이용 클라이언트 구현 Part 3

이미지
그룹핑 ListViewItem 그룹핑 할 수 있습니다. 먼저 CheckBox에 Checked 이벤트를 통해 그룹핑을 추가하고 RemoveChecked 이벤트를 통해 그룹핑을 제거 할 수 있도록 CheckBox를 선언 합니다. 1: <!-- Group CheckBox --> 2: <CheckBox Grid.Column="0" 3: Grid.Row="0" 4: Checked="AddGrouping" 5: Unchecked="RemoveGrouping">Group by Name</CheckBox> 그룹 스타일 선언 GroupStyle 속성에 ContainerStyle 속성을 이용해 Style을 지정 합니다. Expander 컨트롤을 이용해 아파트명과 그룹 아이템의 개수를 Expander Header에 표시 하도록 ControlTemlate를 선언 합니다. 1: <!-- Group Style --> 2: <ListView.GroupStyle> 3: <GroupStyle> 4: <GroupStyle.ContainerStyle> 5: <Style TargetType="{x:Type GroupItem}"> 6: <Setter Property="Margin" Value="0,0,0,5" /> 7: <Setter Property="Te...

[C#] 태스크(Task)가 완료될 때 까지 대기하여 결과를 얻는 방법

Task를 이용하면 Task가 완료될 때까지 대기 하였다가 결과를 얻는 것이 가능하다.


1:  private static void TaskWaitSample()  
2:      {  
3:        // 태스크를 생성한다.(아직 시작하지 않았다)  
4:        Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 10000);  
5:    
6:        // 태스크를 수행  
7:        t.Start();  
8:    
9:        // 필요하다면 태스크가 완료될 때까지 명시적으로 대기할 수 있다.  
10:        // Wait()를 호출한 쓰레드가 블러킹된다.  
11:        t.Wait();  // 참고: 타임아웃 시간이나 CancellationToken을 매개변수로 취하는 메서드도 있음.  
12:    
13:        // 결과를 얻어온다  
14:        Console.WriteLine("The Sum is: " + t.Result);  
15:      }  
16:    
17:      private static Int32 Sum(Int32 n)  
18:      {  
19:        Int32 sum = 0;  
20:        for(; n > 0; n--)  
21:        {  
22:          checked { sum += n; }  
23:        }  
24:    
25:        return sum;  
26:      }  

  • Task 수행 중 예외 발생
Task가 수행 중에 처리되지 않은 예외를 유발하는 경우, 바로 예외가 발생하지 않고 특정 컬렉션에 예외를 저장 한 후, 스레드가 스레드 풀로 반납되도록 한다. 이 후 Wait 메서드를 호출하거나 Result 속성 값을 가져오려 하면 그때 System.AggregateException 예외를 발생 시킨다.

여러 Task가 수행 중에 예외가 발생할 경우 InnerExceptions 속성을 통해 발생하였던 예외들을 순차적으로 순회할 수 있다.

댓글

이 블로그의 인기 게시물

[C#] Task 완료 시 다른 Task를 자동으로 수행

[C#] 명시적으로 Task 생성 및 실행