본문 바로가기

전체 글

(42)
[C#] ThreadPool 사용법 Thread를 사용하다 보면 직면하는 문제점이 있다. 프로그램이 종료되더라도 스레드가 여전히 백그라운드에서 동작중이라 완전히 종료되지 않는 문제가 발생하곤 한다. 일반적으로 스레드를 통해 반복적인 작업을 수행하게 되면 do-while 루프 등을 사용하여 내부적으로 무한 루프를 돌리고, 루프의 조건 변수로 bool 변수 등을 지정해서 스레드를 간접적으로 종료시키는 방법을 사용하게 된다. 아래와 같이. bool isRun; int count = 0; void button_Start_Click(object sender, EventArgs e) { if(isRun) return;// 이미 루프가 돌고 있는 상태라면 새로운 스레드를 생성하지 않는다. new Thread(counter).Start(); } void..
[WinForm] Invoke() delegate 생성 없이 한 문장으로 간단하게 사용하기 참고하면 좋은 C# Solution의 다른 글 [C#] delegate와 delegate 체인 delegate(델리게이트)는 C++의 함수 포인터와 비슷한 기능을 하는 C#의 기능으로, '대리자'라는 의미처럼 메서드를 대신 호출해주는 기능을 한다. 메서드를 대신 호출해주는 기능이 왜 필요할까? 사 cs-solution.tistory.com [WinForm] 크로스 스레드(Cross Thread) 문제 해결 WinForm에서 Thread를 사용해 폼의 컨트롤을 갱신하려고 시도하면 크로스 스레드 예외가 발생한다. 이는 컨트롤을 생성해 관리하는 스레드는 메인 스레드인데, 사용자가 생성한 외부 스레드에서 메 cs-solution.tistory.com Thread에서 Form에 있는 Control의 값을 변경하려..
[C#] FileInfo 클래스로 파일 정보 확인 FileInfo 클래스는 파일의 정보를 제공하는 클래스이다. System.IO 네임스페이스에 선언되어 있으므로 FileInfo 클래스를 사용하기 위해 다음과 같이 네임스페이스를 추가한다. using System.IO; FileInfo 클래스의 인스턴스를 생성하기 위해 생성자에 정보를 확인하고자 하는 파일의 전체 경로를 인자로 넘긴다. 반드시 실제로 존재하는 파일의 경로를 지정할 필요는 없다. var finfo = new FileInfo("Test.txt"); FileInfo의 여러 가지 기능들을 사용해보자. 1. Exists 파일이 존재하는지의 여부를 나타내는 속성이다. 파일이 존재한다면 true이고, 존재하지 않는다면 false이다. var finfo = new FileInfo("Test.txt"); ..
[C#] StreamReader와 StreamWriter로 파일 읽기, 쓰기 C#에서 파일을 읽고 쓰기 위한 스트림으로 StreamReader와 StreamWriter를 사용할 수 있다. 이 클래스들은 System.IO 네임스페이스에 선언되어 있으므로 사용하기 위해서는 System.IO를 using 해줘야 한다. using System.IO; 1. 파일 읽기 파일을 읽기 위해서 StreamReader를 사용한다. 파일 경로를 통해 새로운 StreamReader 개체를 생성하자. void ReadFile(string path) { var sr = new StreamReader(path); } StreamReader의 생성자에 들어가는 path는 파일의 경로와 파일명(파일 이름 + 확장자)을 포함하는 전체 경로여야 한다. (단, 파일이 실행 프로그램(*.exe)과 같은 경로상에 존재..
[WinForm] Drag & Drop으로 파일 가져오기 파일을 마우스로 끌어서 WinForm의 RichTextBox 컨트롤에 가져다 놓으면 파일을 읽어서 내용을 RichTextBox에 출력해주는 프로그램을 만들어본다. 기본적으로 WinForm의 컨트롤은 Drag&Drop에 대한 처리가 구현되지 않았기 때문에 아래와 같이 파일을 가져다 올리면 🚫와 같은 모양으로 마우스 커서가 바뀌고, 파일을 놓아도 아무 일도 발생하지 않는다. Drag&Drop 이벤트를 구현하기 위해 몇 가지 단계를 거친다. 1. Drag&Drop을 처리할 컨트롤에서 AllowDrop 속성을 true로 설정해준다. AllowDrop 속성은 컨트롤에서 끌어서 놓기 작업을 수행할 수 있는지의 여부를 나타내는 속성이다. 만약 AllowDrop 속성이 속성 창에서 보이지 않는다면, 코드상에서 직접 A..