[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#] ThreadPool 작업 취소와 타임아웃 Part 2

CancellationTokenSource의 Register 메서드를 이용하면 CancellationTokenSource가 취소될 때 수행할 여러 개의 메서드를 미리 등록할 수 있다.

  • 샘플
1:  private static void CancelTokenRegisterTest()  
2:      {  
3:        CancellationTokenSource cts = new CancellationTokenSource();  
4:        cts.Token.Register(() => Console.WriteLine("Canceled 1"));  
5:        cts.Token.Register(() => Console.WriteLine("Canceled 2"));  
6:    
7:        cts.Cancel();  
8:      }  
  • 결과




CancellationTokenSource 객체들을 연결하여 새로운 CancellationTokenSource 객체를 생성할 수도 있다.

이렇게 생성된 CancellationTokenSource 객체는 연결된 CancellationTokenSource 객체들 중 하나라도 취소되면 같이 취소 된다.

  • 샘플
1:  private static void CancelLinkedTest()  
2:      {  
3:        // CancellationTokenSource 생성  
4:        var cts1 = new CancellationTokenSource();  
5:        cts1.Token.Register(() => Console.WriteLine("Canceled 1"));  
6:    
7:        // 다른 CancellationTokenSource 생성  
8:        var cts2 = new CancellationTokenSource();  
9:        cts2.Token.Register(() => Console.WriteLine("Canceled 2"));  
10:    
11:        // cts1과 cts2를 연결하여 새로운 CancellationTokenSource 객체인 linkedCts를 생성  
12:        var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(cts1.Token, cts2.Token);  
13:        linkedCts.Token.Register(() => Console.WriteLine("linkedCts Canceled"));  
14:    
15:        // 이제 연결된 CancellationTokenSource 객체들 중 하나를 취소한다.  
16:        cts2.Cancel();  
17:    
18:        // 어떤 CancellationTokenSource 객체가 취소되었는지 출력해본다.  
19:        Console.WriteLine("cts1 canceled={0}, cts2 canceled={1}, linkedCts canceled={2}", cts1.IsCancellationRequested, cts2.IsCancellationRequested, linkedCts.IsCancellationRequested);  
20:      }  

  • 결과




가끔은 일정 시간이 지난 후에 작업을 취소하고 싶은 경우가 있다. 다행스럽게도 CancellationTokenSource 특정 시간이 경과 하였을 경우 자체적으로 작업을 취소할 수 있는 기능을 가지고 있다.

  • 샘플
1:  private static void DelayCancelTest()  
2:      {  
3:        // 지정한 시간 후에 작업이 취소 된다.  
4:        //var cts = new CancellationTokenSource(3000);  
5:        var cts = new CancellationTokenSource();  
6:        cts.Token.Register(() => Console.WriteLine("Delay Canceled"));  
7:    
8:        cts.CancelAfter(3000);  
9:      }  


댓글

이 블로그의 인기 게시물

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

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

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