본문 바로가기

Programming/C#17

winform에서의 크로스 스레드 해결하기. 다른 Framework도 마찬가지겠지만, winform에서도 mainThread(메인 UI가 동작하는 부분) 이외의 Thread에서 control을 제어하려고 하면 크로스 스레드 문제가 발생한다. (MFC할 때는 별 문제 없었던거 같았는데 ㅠ_ㅠ) 항상 해도 지나면 까먹길래 이번 기회에 확실히 기록해 두려고 한다.일단 아래와 같은 쓰레드에서 동작하는 코드가 있다고 치자. public void Thread_Run(){button1.Text = "테스트입니다.";} 위의 코드는 쓰레드 상에서는 동작하지 않는다. 물론 메인 쓰레드에서는 잘 동작한다.Winform에서는 메인 쓰레드 이외의 쓰레드에서 컨트롤을 건드릴 필요가 없다고 생각해서 쓰레드에서의 컨트롤 제어를 막아놓고 있다.하지만 개발을 하다보면 어떻게 메.. 2014. 11. 23.
winform 올림,내림, 반올림 C#에서의 소수 올림, 내림, 반올림 함수. Math.Ceiling(doubleValue); // 올림 Math.Round(doubleValue); // 반올림Math.Truncate(doubleValue); // 버림 2014. 11. 22.
Winform에서 combo box edit disable 설정하기 C# Winform에서 combo box 안의 텍스트를 수정 못하게 하려면 어떻게 해야 할까? 다음과 같이 DropDownStyle을 DropDownList style로 변경하면 된다. comboBox.DropDownStyle = ComboBoxStyle.DropDownList; 위와 같이 코드로 작성하지 않고 속성 값을 변경함으로써 동일한 효과를 발생시킬 수 있다. 2014. 11. 21.
웹 상의 이미지 다운받기 웹 상의 이미지 주소만 가지고 로컬 저장소에 다운 받기. 머 별다른 코드 설명은 필요 없을듯.. 2014. 9. 17.
html 파싱하기 python 처럼 C#도 beautifulsoup4 같은 화려하고 강력한 기능이 있나 싶어서 열씸히 구글링을 해보았는데, bs4만큼 편리하지는 않지만 C# 개발자들이 가장 많이 사용한다는 라이브러리 발견! 해당 라이브러리 가기(HtmlAgilityPack) 기본적인 사용법은 아래와 같다. 처음에는 많은 사람들이 WebBrowser 콘트롤을 이용하여, html을 파싱하길래 나 역시 그걸 이용하여 코드를 작성하였는데,(WebBrowser 콘트롤을 사용하면 web 로딩이 완료되었을 시, 내부적으로 domparsing도 진행해 주는것 같다.) 내 쪽 코드 문제인지, 어떤 이유인지는 모르게 자바스크립트 오류가 뜨면서 DocumentCompleted 이벤트가 종종 발생하지 않는 경우가 발생하였다. 자바스크립트 창을.. 2014. 9. 15.
WebClient Timeout 설정 WebClient 클래스를 이용하여 HTTP로 파일을 다운받는 코드 개발 중... 다운로드 timeout을 주고 싶은데 아무리 찾아봐도 WebClient.DownloadFile 함수에는 timeout 파라미터가 보이지 않는다.다운로드 역시 http를 통해 진행하기 때문에 WebClient의 request에 대한 timeout을 설정하면 된다.아래는 WebClient의 request를 설정하기 위한 custom class. class MyWebClient : WebClient{int m_nTimeOut = 0;public MyWebClient(int timeOut){m_nTimeOut = timeOut * 1000;} protected override WebRequest GetWebRequest(Uri a.. 2013. 9. 7.
StringBuilder Capacity String 연산 시 StringBuilder의 사용이 더 효용적이라는 것은 개발자들 사이에선 이미 진리로 자리잡았다. 그럼 StringBuilder는 어떻게 사용해야 되는 것일까? 대부분 아래와 같이 StringBuilder 객체 생성 후 Append 하여 사용하는 경우가 많을 것이다.StringBuilder sb = new StringBuilder(); for(int i = 0; i < 10; i++){ sb.Append(str[i]); } 하지만 위와 같은 방식은 그리 좋지 못하다. 기본적으로 StringBuilder 객체 생성 시 내부적으로 16 bytes의 버퍼 크기를 가진다. 만약 Append 시 16 bytes 이상의 문자열이 입력으로 들어왔다면, StringBuilder 내부에서는 버퍼를 .. 2013. 8. 12.
sqlite 특수문자 에러 sqlite를 쓰다 보니 입력 쿼리에 ' '' 로 바꿔주면 된다.C# 코드query = query.Replace("'", "''"); 에러는 발생하지 않지만, 매 쿼리마다 다 저렇게 replace를 해주려니.... 먼가 찝찝.. 2013. 8. 8.
JSON 사용하기2 이전 포스팅에서 설명한 방법대로 C#에서 JSON을 사용해도 무방하지만 해당 경우는 반드시 MemoryStream을 이용해야 하는 경우이다. String으로 받은 JSON 문자열을 일일이 parsing 해 주지 않고 객체로 변경할 수 없을까? 하는 고민에 빠져있던 중 괜찮은 JSON Library 발견!! JSON for .NET 사용 방법은 아래와 같다. 2013. 2. 20.