C#에서 Thread는 매개변수를 받지 않는 메서드만 사용할 수 있기 때문에, 매개변수를 함께 전달하고 싶을 때는 ParameterizedThreadStart 또는 **lambda 식**을 활용해야 합니다.
void SignalToCsvWithParam(object obj)
{
string msg = obj as string;
// 예: CSV 파일 저장 처리
File.AppendAllText("output.csv", $"{DateTime.Now}, {msg}\n");
}
// 사용
Thread t = new Thread(new ParameterizedThreadStart(SignalToCsvWithParam));
t.IsBackground = true;
t.Start("RALARM|222");
✅ 해결 방법 2: 람다로 클로저 처리 (권장 방식)
string msg = "RALARM|222";
Thread t = new Thread(() =>
{
File.AppendAllText("output.csv", $"{DateTime.Now}, {msg}\n");
});
t.IsBackground = true;
t.Start();
✅ 기타: Task로도 처리 가능 (비동기 처리를 명시할 경우)
string msg = "RALARM|222";
Task.Run(() => {
File.AppendAllText("output.csv", $"{DateTime.Now}, {msg}\n");
});
SocketServer처럼 통신 이벤트에서 메시지를 실시간으로 받아 처리하는 경우, 매번 새로운 쓰레드 생성보다는 BlockingCollection + 소비자 스레드 패턴을 사용하는 것이 안정적입니다.
* 데이터 수신부와 저장부를 완벽히 분리하여 스레드 안정성과 성능 유지가능하다.
BlockingCollection<string> _queue = new BlockingCollection<string>();
void StartCsvWriter()
{
Thread csvWriter = new Thread(() =>
{
foreach (var msg in _queue.GetConsumingEnumerable())
{
File.AppendAllText("output.csv", $"{DateTime.Now}, {msg}\n");
}
});
csvWriter.IsBackground = true;
csvWriter.Start();
}
// 통신 데이터 수신 시 호출
_queue.Add("RALARM|222");
[C# Application] - How to make a WhatsApp Messenger _ FoxLearn채널 (목표기한: 10.31) (2) | 2024.10.29 |
---|---|
[C#] Directory 클래스, DirectoryInfo 클래스, File 클래스 , FileInfo클래스_ 최종: 파일탐색기 만들기 (0) | 2024.10.27 |
[ C#] 고급 컨트롤 (리스트 뷰, 트리뷰, 웹브라우저) (2) | 2024.10.27 |
[ C#] 기본 컨트롤 (Form, 체크박스,라디오버튼,그룹박스,텍스트박스,리스트박스와콤보박스) (2) | 2024.10.27 |
[C#] String 클래스 + 문자열 관리 메소드 표 제공 (0) | 2024.10.27 |