c# List를 ListBox에 바인드하기

List는 ListBox와 DataGridView에 바인드할 수 있다. ListBox는 단순하여 그 쓸모가 제한적이므로 실무에서 자주 이용되지는 않는다. ListBox는 ListControl을 상속하며 ListControl은 ListBox와 ComboBox로 파생된다. ListBox와 ComboBox는 형제로서 전자는 후자를 드롭 다운한 형태로 보면 된다. 원칙적으로 ComboBox처럼 하나의 열만 가질 수 있고 예외적으로 MultiColumn 프라퍼티를 참으로 하여 여러 열들을 가질 수 있다. 그러나 이는 여러 개의 관념적인 열들을…

c# 레퍼런쓰 타잎 객체를 뜨레드의 아규먼트로 이용할 때 주의할 점

레퍼런쓰 타잎 객체를 뜨레드의 아규먼트로 이용하면 뜨레드에서 처리되는 동안 객체의 값이 바뀐 경우 뜨레드가 전달 받은 객체가 아닌 바뀐 객체가 뜨레드 안에서 이용되는 문제가 생긴다. 예를 들어 WndProc으로 윈도우즈의 특정 메씨지를 잡아서 이걸 아규먼트로 하여 뜨레드를 만들어 돌리는 경우를 생각해 볼 수 있다. 이베스트투자증권의 api를 이용하여 주식 등의 가격을 처리할 때가 이렇다. 삼성전자의 현재 가격을…

c# 대이터 래이스를 막는 lock의 유효 범위

아래의 코드는 대이터 래이스를 일어나게 하는 예제다. start debugging을 하면 오류로 인해 실행되지 않고 start without debugging을 하면 대이터 래이스를 확인할 수 있다. 위 예제에서 TestClass1은 서로 다른 뜨레드에서 실행되는 서로 다른 메떠드로 보내진다. 서로 다른 뜨레드에서 실행되는 하나의 메떠드에서는 lock으로 쉽게 대이터 래이스를 막을 수 있지만 위와 같은 경우에도 그럴까? 그렇다. 아래의 코드는 대이터…

c# 변수를 파일로 읽고 쓰기 – application settings

애플리캐이션을 만들다 보면 많은 변수들이 쓰인다. 변수들 가운데에는 애플리캐이션을 종료한 때 파일로 저장했다가 애플리캐이션을 다시 실행한 때 그대로 불러다 읽어서 써야 하는 것들이 있다. 이 과정은 개념적으로 간단하지만 구현하려면 까다롭고 번거롭다. 일반적으로 변수에는 이름을 붙여서 쓴다. 리스트나 배열의 아이템을 변수로 이용할 수도 있지만 이렇게 하면 이름이 아닌 인덱스로 접근해야 하므로 실수를 할 가능성이 크다. 변수의…

c# 프로젝트가 바이러스로 인식되는 문제의 해결 방법

c#도 그렇고 델파이도 그렇고 애플리캐이션이나 라이브러리를 빌드하면 바이러스로 인식되는 경우들이 흔하다. 이런 경우 대부분은 바이러스 검색 로직의 문제로서 여러 검색 프로그램들 가운데 일부만 그렇게 잡아 내기 때문에 무시하고 그냥 쓰면 되는데 그 일부에 윈도우즈 디펜더가 포함된다면 문제가 좀 달라진다. 무시하기가 힘들기 때문이다. 이런 경우 프로그램을 이용하는 입장에서는 백신 프로그램이나 윈도우즈 디펜더에서 해당 파일을 예외로 처리하게…

증권회사 api 체결 대이터와 호가 대이터의 수신 순서

주식 등이 체결되면 체결 대이터가 만들어지며 호가 대이터는 변한다. 이들은 논리적으로 동시에 일어나므로 한국거래소와 증권회사 등은 멀티뜨레드로 처리할 수 있다. 그러나 실제로 받아 보면 주로 체결 대이터 – 호가 대이터의 순서로 수신된다. 한국거래소가 어떻게 처리를 하는지는 모르나 내가 테스트한 이베스트투자증권은 싱글 뜨레드로 처리하고 있다. 문제는 이렇게 동기 처리를 해도 그 순서대로 클라이언트가 받는 건 아니라는…

비주얼 스투디오 c# 디버그와 릴리스 빌드의 차이와 주의할 점

릴리스 빌드를 한 때 주의할 점 디버그 빌드는 말 그대로 디버그를 하기 위한 거고 릴리스 빌드는 배포를 위한 거다. 디버그 빌드와 릴리스 빌드 사이에는 큰 차이가 없다. 비주얼 스투디오에서 디버그를 실행하는 거와 릴리스 빌드 사이에 큰 차이가 있을 뿐이다. 아래에 다루는 내용은 디버그 빌드가 아니라 비주얼 스투디오에서 디버그를 하는 경우다. 프로그램을 만들다 보면 대부분의 경우…

c# 모들(modal) 폼 만들기

modal form이란 다른 폼으로 제어권을 넘겨주지 않는 폼을 말한다. modal은 mode의 형용사로 mode는 ‘특정한 상태’를 뜻하고 modal은 ‘실행 방법이 지정된’이라는 의미다. 모들 폼에서 벗어나려면 모들 폼을 종료해야 한다.