본문 바로가기

개 발코딩

C# 멀티쓰레드에서 Winform 컨트롤 변경시 동기화 방법 윈폼 프로젝트를 생성하고, TextBox를 하나 추가하였고, 아래와 같은 소슬 작성하였다.private void Form1_Load(object sender, EventArgs e) { Thread th = new Thread(test); th.Start(); } void test() { textBox1.Text = "열려라 참깨"; } 그리고 빌드를 진행하니 아래와 같이 '크로스 쓰레드' 에러가 발생하였다.원인은 메인 쓰레드에서 객체를 가지고 있는데, 딴 넘이 와서 설정을 변경하니 발생한 에러다.그래서 이럴 경우는 동기화를 시켜줘야한다.아래와 같이 Invoke()나 BeginInvoke()를 메소드를 사용해서 동기화 할수 있다.delegate void testDel(); private void Form.. 더보기
c# 하위 디렉토리 포함하여 파일 검색하기 먼저 소스를 공개하겠다. namespace FileReader { class Program { static int count = 1; static void Main(string[] args) { DirFileSearch(@"D:\데이터", "dat"); } static void DirFileSearch(string path, string file) { try { string[] dirs = Directory.GetDirectories(path); string[] files = Directory.GetFiles(path, $"*.{file}"); foreach(string f in files) { // 이 곳에 해당 파일을 찾아서 처리할 코드를 삽입하면 된다. Console.WriteLine($"[{cou.. 더보기
[c#] 메소드 내에 return을 쓰는 경우 유의사항 오늘에서야 알게 된 것...메소드 내에서 try-catch문을 썼고, try 안에 return 문을 넣고 finally에 어떤 코드를 삽입했는데,황당하게 finally 문을 다 수행하고 마지막에 리턴을 하는 것이었다. 맞다...이건 원래 그런 것이다..ㅡㅡ 오늘에서야 알게된 이 허접함이란 참....;;; 그리고 또, 메소드 안에 using()문을 쓰고, 그안에 return 문을 넣었더니, return을 씹는다...;;;열심히 구글링을 해봤더니, 양키가 using문 안에 return 문을 넣어봤자 안된단다.그러니 using문 바깥에서 변수를 선언해서 using문 안에서 그 변수에 값을 넣어주고 using문이 끝난후에 그 변수를 리턴해 주는 방식으로 하란다. 그렇다... return 하면 무조건 그 줄까지만.. 더보기
[c#] 폼안에 컨트롤 가운데 정렬 가운데 정렬하는 방법은 아래와 같다. button1.Left = (this.ClientSize.Width - button1.Width) / 2 ; button1.Top = (this.ClientSize.Height - button1.Height) / 2; button1은 Button 컨트롤의 인스턴스이다.만약에 가로만 가운데로 정렬하기 원한다면 left 값만 설정하면 된다. 더보기
[c#] 웹 구축시 Log4net 설정하기 먼저 web.config 파일의 안에 아래의 내용을 추가한다. 위에 DebugAppender는 VisualStudio에서 immediate window에 로그를 남기는 기능을 한다. RollingFileAppender는 로그 파일을 파일에 쓴다. rollingStyle을 Date로 하고 yyyyMMdd와 같이 쓰면 매일 새로운 로그파일이 생성되고 위와 같이 yyyyMM까지만 작성시에는 매월마다 파일이 작성된다. root 아래에 level을 value를 변경하여 로그 레벨을 설정할 수 있다. 레벨은 ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF 이렇게 있다. 다음으로 Global.asax 파일의 namespace 윗부분에 아래와 같은 assembly a.. 더보기
[c#] 파일 내의 특정 줄 읽어오기 파일 내의 특정 줄을 읽는 메소드가 제공되는지 찾아보았는데, MS에서는 특정 줄을 읽어오는 메소드는 제공되지 않는다. 대신, FileStream.Seek 메소드를 통해 파일 포인터로 접근하는 것이 가능하지만, 한줄의 텍스트 길이가 일정하지 않는이상 특정줄을 찾아가는 것이 불가능하다. 고로 어쩔 수 없이 ReadLine 메소드를 여러번 루프를 돌려서 찾아가는 수 밖에 없다. 소스는 아래와 같다. var fileLastStrList = new List(); string path = string.Format(rawFilePath + "silo{0}.dat", siloNum); using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,.. 더보기
[C#] DevExpress, Chart control X축 날짜 형태 변경하기 chart Control에서 X축을 DateTime 형식으로 변경했을 때, 기본적인 날짜 형태는 아래와 같이 일 단위 입니다. 여기서 형태를 변경해 보겠습니다. 일단 변경과 관련된 소스는 아래와 같습니다. ChartControl chartControl1 = new ChartControl(); XYDiagram diagram = (XYDiagram)chartControl1.Diagram; diagram.AxisX.Label.TextPattern = "{A: yy/MM/dd hh:mm}"; diagram.AxisX.DateTimeScaleOptions.ScaleMode = ScaleMode.Manual; diagram.AxisX.DateTimeScaleOptions.GridSpacing = 1; diagra.. 더보기
[C#] DevExpress에 chart control 에서 Line 그래프 선 두께 변경하기 아래와 같이 차트를 생성하고, 굵기는 LineSeriesView로 형변환하여 변경이 가능합니다. 아래 tickness가 선그래프의 굵기가 됩니다.Series s = new Series("차트1", ViewType.Line); ((LineSeriesView)s.View).LineStyle.Thickness = 1; LineStyle 클래스에 대한 추가적인 내용은 아래 링크를 통해 확인하실수 있습니다. https://documentation.devexpress.com/#CoreLibraries/clsDevExpressXtraChartsLineStyletopic 더보기
[C#] DevExpress로 실시간 그래프(차트) 만들기 (움직이는)실시간 그래프 다양한 차트 라이브러리를 통해 작성이 가능하다. 그 중에서 가장 대중적인 것은 MS에서 기본적으로 제공해주는 MS Chart를 이용하는 것이다. 그러나 이번 글은 DevExpress를 사용하여 실시간 그래프를 만들어 보겠다. DevExpress의 control 중에서도 chart control을 사용하겠다. (DevExpress 설치에 관련된 내용은 홈페이지에 가면 친절하게 안내되어 있으므로 생략합니다.) 아래와 같이 프로젝트를 생성한다. winforms common 카테고리에서 Blank application을 선택하고 프로젝트를 생성한다. 다음으로 toolbox를 열고, 아래와 같이 chart control을 윈폼 창으로 드래그 한다. 그럼 아래와 같은 차트 디자이너 창이 뜨.. 더보기
ASP "/vshub/~" request 없애는 방법 visual studio에서 웹서비스를 구축하여 fiddler에서 전문이 잘 전달되는지 확인하는 중에 "http://localhost:49155/vshub/5a2e088adc05473295516f8bdda71dcf/블라블라~"와 같은 요청이 수없이 발생하는 것을 발견하였다. 아래는 fiddler 캡쳐영상이다. 저기에 계속 요청을 날리는 vshub라는 친구가 뭐하는 녀석인지 알아보니, 실시간 cpu,와 memory 정보를 보여주는 콤포넌트라고 한다. 궂이 이런걸 요청할 필요는 없으니, 안뜨도록 설정하자. 방법은 아래와 같다. 비주얼스튜디오의 상단 메뉴에서 " Tools > Options > Debugging > General " 메뉴에서 항목중에 "Enable Diagnostic Tools while de.. 더보기