c#

  • wpf로 윈도우즈 메시지 처리하기

    AddHook는 HwndSourceHook라는 델리개이트를 아규먼트로 받는다. 메떠드에 메떠드를 아규먼트로 전달할 때에는 메떠드 자체를 넘길 수 없고 델리게이트라는 레퍼런스 타입으로 넘겨야 한다. 메떠드는 밸류가 아니기 때문이다. Func와 Action도 모두 델리개이트다. Delegates are used to pass methods as arguments to other methods.Delegates (C# Programming Guide) AddHook가 HwndSourceHook라는 델리개이트를 콕 집어서 지정한 건 이게 갖는 패러미터들을 특정하기 위해서다. 따라서…

  • c# 문자열 포맷 N0과 #,###의 반올림 차이

    N은 standard numeric format string이다. On .NET Core 2.1 and later, the runtime selects the result with an even least significant digit (that is, using MidpointRounding.ToEven).Standard numeric format strings 은행원의 반올림 즉 짝수에 가깝게 올리거나 내린다. #은 custom numeric format string이다. The “##” format string causes the value to be rounded to the nearest digit…

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

    예를 들어 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는…