c#

  • .네트 확장 멤버 쉬운 설명

    예를 들어 System.Linq.Enumerable.Count()는 List.Count 프라퍼티처럼 이뉴머러블 엘리먼트들의 수를 반환한다. 하지만 후자와 달리 조건을 붙일 수 있다. 링큐로 가능한 메떠드를 레거시 컬렉션도 쓸 수 있게 한다. 그래서 확장 메떠드라 한다. 예가 문법을 따르지 않았지만 제대로 작동한다. 문법을 따른 예는 이렇다. 앞의 예가 뒤의 그것보다 편하다. Extension methods are static methods, but they’re called as if they…

  • 비주얼 객체들이 동시에 나타나지 않는 문제

    윈도우즈에서 드로잉은 순서대로 처리되지 않는다. Most drawing carried out during processing of the WM_PAINT message is asynchronous;Synchronous and Asynchronous Drawing 예를 들어 폼이 처음 나타날 때 대이터 그리드 뷰 두 개를 동시에 보이게 하려 한다. 컨스트럭터에서 순서대로 출력 메떠드를 호출해도 이 순서는 보장되지 않는다. 먼저 연산을 마친 게 먼저 출력된다. 컨스트럭터가 실행되는 동안 대이터 그리드…

  • c# task와 async/await 비교

    task와 async/await는 모두 비동기 처리를 구현하는 데에 쓰는 기능들이다. 예를 들어 처리에 오래 걸리는 a, b, c를 연속으로 처리할 때 보통의 방법 즉 동기로 처리하면 각 작업이 돌아가는 동안 애플리캐이션은 먹통이 된다. 이들 작업을 task나 async/await로 처리하면 이것들은 유저 인터패이스 뜨레드에서 벗어나 백그라운드에서 작동하여 애플리캐이션을 멈추지 않게 한다. task는 주로 완전히 떠나 보낼 때 이용한다….

  • c# owner 속성

    .네트의 윈도우즈 폼즈 앱은 form으로 표현하고 wpf 애플리캐이션은 window로 한다. 이들은 owner 속성을 갖는다. 윈도우즈 폼즈와 wpf 모두 자식 폼이나 윈도우를 만들 때 this를 넘겨 줄 수 있다. 자식이 이걸 받아서 부모한테 접근한다. 자식이 부모를 특정할 수 있는 레퍼런스를 가질 뿐 이들은 서로 독립적이다. 부모 폼이나 윈도우를 최소화한다고 자식도 작아지지는 않는다. 심지어 wpf의 경우에는 부모…

  • ClosedXML TimeOnly 처리 오류

    ClosedXML를 이용하여 DataTable을 엑셀 시트로 바꿀 때 DataColumn의 타입이 TimeOnly이면 아래의 코드는 작동하지 않고 ‘오후 1:23’으로 출력된다. DataColumn의 타입을 DateTime으로 바꾸면 제대로 작동한다.

  • [ls증권 api] 뉴스 본문 한글 깨지지 않게 출력하기

    위 api는 뉴스 본문을 100 바이트씩 잘라서 처리한다. 알파베트와 숫자는 한 글자가 1 바이트로 처리되므로 문제될 게 없는데 한글은 그렇지 않아서 100 바이트씩 끝나고 시작하는 지점에서 깨진다. 위 문제를 피하려면 t3102OutBlock*를 occurs로 나눠 처리하지 않고 아래와 같이 통째로 변환한다. Marshal.Copy는 언매니지드 메모리 포인터를 매니지드 배열로 복사한다. ls증권의 서버는 utf-8도 16도 아닌 euc-kr로 인코드를 한다. euc-kr는…

  • c# INotifyPropertyChanged를 이용하여 BindingList를 DataGridView에 연결하기

    DataGridView에 연결하는 컬렉션으로 크게 List, BindingList, DataTable 세 가지를 이용한다. List에는 아이템을 추가하거나 삭제한 때 DataGridView에 반영되지 않는 문제가 있다. DataTable는 느려서 이용하기 곤란할 때가 있다. BindingList에는 아이템을 수정한 때 DataGridView에 반영되지 않는 단점이 있다. windows forms 애플리캐이션에서 BindingList를 DataGridView에 연결하고 전자의 아이템 값이 바뀐 때 이 값을 DataGridView에 반영하려면 INotifyPropertyChanged 인터패이스를 쓰는 게 제일…

  • c# BindingList sort

    DataGridView에 연결하여 쓸 때 List는 sort가 쉽지만 그 결과가 바로 반영되지 않는다. DataSource = Null을 한 뒤 다시 바인드를 하면 되지만 칼럼 설정이 초기화된다. sort 결과를 바로 반영하려면 BindingList를 써야 한다. 하지만 이건 sort를 제공하지 않는다. 무식해 보여도 BindlingList를 List로 바꾼 뒤 다시 BindlingList로 바꾸는 게 제일 간단하다. 바인드는 새로 해 줘야 한다.