c#

  • 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로 바꾸는 게 제일 간단하다. 바인드는 새로 해 줘야 한다.

  • ls증권 api는 유니코드가 아니라 앤시로 구현되어 있다

    현재 윈도우즈 프로그래밍은 유니코드를 기본으로 한다. 하지만 ls증권의 api는 비주얼 스투디오 6를 기반으로 하므로 ansi로 구현되어 있다. 버전 6이 나온 1998년에는 앤시가 기본이었다. 2000년 지나 unicode가 널리 쓰이기 시작했다. 윈도우즈 api들도 앤시가 기본이다. 과거 프로그램들과의 호환을 위해서 그렇다. 따로 unicode로 캐릭터 셋을 설정하지 않으면 앤시로 처리된다. 그럼에도 불구하고 윈도우즈 api를 임포트하면 비주얼 스투디오가 유니코드로 설정하라고…

  • [.net] LibraryImport 인텔리센스 오류 – 일단 컴파일하라

    최신 버전의 .넷은 DllImport 대신 LibraryImport를 쓰라고 경고한다. 위와 같이 access modifier와 static partial을 써야 한다. access modifier는 생략할 수 없다. static이므로 더 빠르고 partial이므로 눈에 보이지 않는 어딘가에서 따로 작업이 이뤄지는 걸 알 수 있다. 컴파일을 하면 추가 코드가 자동으로 만들어진다. 이게 문제다. 컴파일을 하여 자동으로 implementation code가 생기기 전에는 인텔리센스가 오류로 인식한다. 이를…