본문 바로가기

전체 글

(6)
C#: List Shuffle과 Swap (by index)구현 방법 1. List Shuffle Java에서는 기본적으로 지원하는 함수지만, C#에서는 확장메서드로 구현 해줘야 한다. public static class ExtensionList { private static Random _ran = new Random(); public static void Shuffle(this List list) { int to = list.Count; while (to > 1) { int from = _ran.Next(--to + 1); T tmp = list[from]; list[from] = list[to]; list[to] = tmp; } } } 2. List Swap List에 index로 서로의 위치를 변경하고자 할때 쓰인다. ex) Drag&Move로 아이템의 위치를 변경..
C#: WCF ServiceClient의 IDiaposable 구현 WCF의 Client 구현시 Service참조를 하면 Proxy코드가 자동 생성된다. 이때 ServiceClient코드도 자동 생성된다. ServiceClient는 ClientBase를 상속받으며, ClientBase는 IDisposable 인터페이스를 구현하였다. 그렇기 때문에 실제 ServiceClient는 아래와 같은 코드로 사용이 가능하다. (※ ServiceClient는 사용후 필히 Close() 처리를 해줘야 함) using (var client = new ServiceClient()) { client.Hello(); } using 블럭으로 감싼 ServiceClient는 ClientBase에서 구현된 Dispose 함수 내부에서 client.Close()를 호출해준다. 여기서 문제는.. cl..
UI 프리징을 피하기 위한 Task 사용 방법 일반적인 GUI Application과 동일하게 Winform 또한 UI Thread가 MainThread 역할을 하며, 해당 Thread는 SingleThread 방식으로 돌아간다. UI Thread는 기본적으로 Loop를 돌면서 MessageQueue에 담긴 Message를 가져오고, Handler에 전달하는 역할을 한다. 이때 Handler에서 딜레이가 오래 발생할 경우 MessageQueue에 담긴 다음 Message를 실행하지 못하므로, UI 프리징 현상이 발생 한다. 이러한 UI 프리징 현상을 방지하기 위해 시간이 오래 걸리는 작업은 별도의 Thread를 생성하여 처리한 후 결과만 UI에 반영하도록 개발 해야한다. BackgroundWorker, Thread, Task, AsyncCallBac..