본문 바로가기
반응형

전체 글97

"WinForms 환경에서 Thread.Sleep vs 사용자 정의 Delay 함수: 차이점과 활용 방안" Thread.Sleep 함수와 사용자 정의 Delay 함수는 각각 C#에서 시간을 지연시키는 방법이지만, WinForms 환경에서의 동작과 영향을 비교하면 다음과 같은 차이점과 장단점이 있습니다.1. Thread.SleepThread.Sleep는 호출된 스레드의 실행을 지정된 시간 동안 일시 중단합니다.특징호출된 스레드를 완전히 멈춤.CPU 리소스를 사용하지 않음.다른 이벤트를 처리하지 않음.장점간단하고 직관적:코드가 간결하며 추가 작업 없이 시간을 지연시킬 수 있습니다.CPU 효율적:지정된 시간 동안 CPU 리소스를 소비하지 않습니다.안정적:다른 작업이나 이벤트 루프에 영향을 주지 않습니다.단점UI 멈춤:WinForms 환경에서 UI 스레드(주 스레드)에서 호출하면 UI가 멈추고 응답하지 않습니다.이벤.. 2024. 12. 26.
"C# WinForms에서 멀티스레드로 안전하게 UI 컨트롤하기: InvokeRequired와 Invoke의 원리와 활용" C# WinForms에서 UI를 업데이트할 때 this.InvokeRequired와 this.Invoke를 사용하는 이유는 멀티스레드 환경에서 UI 스레드(Single-Threaded Apartment, STA)를 안전하게 다루기 위해서입니다. 이를 이해하기 위해 다음의 개념들을 알아야 합니다:1. WinForms의 UI 스레드 모델WinForms는 **단일 스레드(Single Thread)**에서 UI를 관리합니다. 즉, UI 컨트롤은 생성된 스레드(주로 메인 스레드)에서만 직접 접근할 수 있습니다.만약 다른 스레드(예: 백그라운드 작업을 수행하는 Thread 또는 Task)에서 UI를 직접 업데이트하면 InvalidOperationException이 발생할 수 있습니다.2. 멀티스레드에서 UI 업데이.. 2024. 12. 18.
C# partial 키워드 C# partial 키워드C#에서 partial 키워드는 클래스, 구조체, 또는 인터페이스 정의를 여러 파일에 나누어 작성할 수 있도록 허용하는 키워드입니다. 이를 통해 코드의 유지 보수성을 높이고, 큰 파일로 인한 복잡도를 줄일 수 있습니다.partial 키워드는 보통 팀 작업이나 자동 생성된 코드와 수동으로 작성한 코드가 섞여 있을 때 유용하게 사용됩니다. 예를 들어, 코드의 일부는 자동 생성되고, 다른 일부는 개발자가 작성하는 경우에 사용됩니다.주요 특징클래스, 구조체, 인터페이스에 사용:partial 키워드는 클래스, 구조체, 인터페이스에만 사용할 수 있습니다. 메서드나 속성에도 사용할 수 있습니다.예를 들어, partial class, partial struct, partial interface.. 2024. 8. 14.
WinForms에서 AutoScaleMode.Dpi와 AutoScaleMode.Font의 차이점 AutoScaleMode.Dpi와 AutoScaleMode.Font는 WinForms 애플리케이션에서 폼의 자동 크기 조정을 제어하는 두 가지 방법입니다. 둘의 차이점은 크기 조정 기준이 다르다는 점입니다.1. AutoScaleMode.DpiAutoScaleMode.Dpi는 화면의 **DPI(화면 해상도)**에 따라 폼의 크기를 자동으로 조정합니다. 이를 통해 고해상도 화면에서 폼이 더 선명하고 읽기 쉽게 표시되도록 합니다.**DPI(도트 퍼 인치)**는 화면의 해상도와 밀도를 나타내는 지표로, DPI가 높으면 같은 크기의 화면에서 더 많은 픽셀이 표시됩니다. 따라서 고해상도 화면에서는 폼이 자동으로 확대되어 더 선명하게 표시됩니다.주요 특징:화면 DPI에 맞게 폼의 크기와 컨트롤 크기를 자동으로 조정합.. 2024. 8. 14.
사용자 정의 타입 ArrayList.Sort 사용자 정의 타입 ArrayList.Sort IComparable 상속 받고 CompareTo 메서드를 구현하고 ArrayList에서 Sort를 호출하면 CompareTo 메서드를 호출하게 된다.  public class Person : IComparable { public int Age; public string Name; public Person(int age, string name) { this.Age = age; this.Name = name; } public int CompareTo(object obj) { Person target = o.. 2024. 8. 1.
System.IO.MemoryStream System.IO.MemoryStream MemoryStream 타입은 이름 그대로 메모리에 바이트 데이터를 순서대로 읽고 쓰는 작업을 수행하는 클래스다.이를 이용하면 데이터를 메모리에 직렬화/역직렬화하는것이 가능하다.  // short와 int 데이터를 순서대로 memorystream에 직렬화. byte[] shortBytes = BitConverter.GetBytes((short)32000); byte[] intBytes = BitConverter.GetBytes(1652300); MemoryStream ms = new MemoryStream(); ms.Write(shortBytes, 0, shor.. 2024. 8. 1.
OpenCvSharp을 사용하여 CV_8UC3에서 CV_8UC4로 변환하는 방법 배경 설명OpenCV에서 MatType.CV_8UC3은 8비트, 3채널(BGR 색상 공간) 이미지를 나타냅니다. MatType.CV_8UC4는 8비트, 4채널(BGRA 색상 공간) 이미지를 나타냅니다. CV_8UC3에서 CV_8UC4로 변환하려면, 기존의 3개 채널(BGR) 이미지에 알파 채널(투명도)을 추가해야 합니다. 알파 채널은 보통 255로 설정하여 불투명하게 만드는 것이 일반적입니다.코드 설명이미지 생성:Mat 객체를 생성할 때, MatType.CV_8UC3를 사용하여 3채널 이미지를 생성하고, Scalar.All(255)로 각 픽셀을 흰색으로 초기화합니다.MatType.CV_8UC4를 사용하여 4채널 이미지를 생성하고, Scalar.All(0)로 각 픽셀을 검정색으로 초기화합니다.색상 변환:C.. 2023. 12. 17.
C# visual studio에서 참조 표시 vs 2022 기준. 옵션 >> 텍스트편집기 >> 모든 언어 >> CodeLens 2023. 8. 12.
프로퍼티 class 클래스이름 { 데이터형식 필드이름; 접근한정자 데이터형식 프로퍼티이름 { get { return 필드이름; } set { 필드이름 = value; } } } class MyClass { private int myField; public int MyField { get { return myField; } set { myField = value; } } } MyClass ojb = new Mylass(); obj.MyField = 3; Console.WriteLine( obj.MyField ); 2023. 8. 5.
오름차순과 내림차순을 쉽게 이해하기: 작은 것부터 큰 것, 큰 것부터 작은 것! 오름차순(Ascending Order)오름차순은 작은 숫자부터 큰 숫자 순서로 정렬하는 것을 말해요.예를 들어:1, 2, 3, 4, 5처럼 숫자가 점점 커지는 순서예요.쉽게 생각해보면:계단을 아래에서 위로 올라가는 느낌이에요.작은 것에서 시작해서 큰 것으로 끝나요.또 다른 예:숫자: 3, 1, 4, 2 → 오름차순으로 정렬하면 1, 2, 3, 4알파벳: B, A, C → 오름차순으로 정렬하면 A, B, C (알파벳도 숫자처럼 순서가 있어요!)내림차순(Descending Order)내림차순은 큰 숫자부터 작은 숫자 순서로 정렬하는 것을 말해요.예를 들어:5, 4, 3, 2, 1처럼 숫자가 점점 작아지는 순서예요.쉽게 생각해보면:계단을 위에서 아래로 내려가는 느낌이에요.큰 것에서 시작해서 작은 것으로 끝나요.. 2023. 7. 23.
반응형