본문 바로가기

전체 글196

[C# WPF] WPF TextTrimming이 가능한 조건 TextTrimming WPF에서는 TextBlock의 TextTrimming 속성을 사용하여 텍스트가 너무 길어질 때 트리밍할 수 있다. 컨트롤의 길이보다 내부 텍스트의 길이가 길어지면, 끝에 ... 을 표시해서 텍스트가 더 있다는 것을 알려준다. 아래처럼 TextBlock을 하나 만들자. 위 텍스트는 Width 100인 TextBlock보다 길기 때문에 아래처럼 잘리게 된다. 현재까지는 위 텍스트가 "I am REALLY long"인지, 아니면 뒤에 더 있는지 알 수가 없다. 이 때 TextTrimming 속성을 추가해주면 ...이 보이게 된다. TextTrimming="WordEllipsis" Text Trimming에는 3가지 속성이 있다. 1. None: 텍스트가 화면을 넘어가면 자르지 않고 그.. 2023. 10. 31.
[C#] 캐스팅(Casting)과 Convert 클래스 데이터 타입 간의 변환 암시적 변환 (Implicit Conversion) 정수는 실수이다. 이 말은 맞는 말이다. 왜냐하면 정수는 실수에 포함되기 때문이다. 이렇듯 범위가 더 큰 데이터 타입으로 변환할때는 데이터 손실이 없기 때문에, 따로 무언가를 안해줘도 변환이 자동으로 수행된다. int 보다 더 큰 범위의 정수인 long, 실수범위인 float와 double은 따로 변환을 안해주어도 int형이 자동으로 변환되는 것을 볼 수 있다. 명시적 변환 (Explicit Conversion) 반대로 '실수는 정수이다.' 이 말은 틀리다. 실수를 정수로 변환시키려면 소수점이 존재하는 경우 버려야하고, 올림할지 버림할지도 정해햐한다. 이렇게 데이터의 손실이 발생하는 경우의 변환을 명시적 변환이라고 한다. 이 변환.. 2023. 10. 19.
[C#] 애트리뷰트(Attribute)란? 애트리뷰트는 C# 프로그래밍 언어에서 사용되는 주석 같은 것이다. 애트리뷰트는 대괄호 [ ] 안에 위치하며, 코드에 부가 정보를 기록하고 읽을 수 있도록 해준다. 제공되는 애트리뷰트 종류 아래는 일반적으로 제공되는 애트리뷰트의 종류이다. [Serializable]: 클래스가 직렬화될 수 있음을 나타낸다. [DllImport]: 외부 네이티브 DLL 함수를 가져오는 데 사용된다. [WebMethod]: ASP.NET 웹 서비스에서 사용되며, 웹 서비스 메서드로 노출되어야 하는 메서드를 표시한다. [Authorize]: ASP.NET에서 사용되며, 특정 페이지 또는 리소스에 대한 액세스 권한을 확인한다. [Description]: 클래스 또는 멤버의 설명을 제공한다. [Conditional]: 특정 조건에 .. 2023. 10. 18.
[C# WPF] e.Handled = true; e.Handled = true; Event Handled, 즉 이벤트가 처리되었다는 뜻이니까.. 처음에는 그냥 for문의 break와 같은 역할인 줄 알았다. 그렇게 대충 넘어가고 코드를 짜다가, 계속해도 안되었던 것이 e.Handled = true;를 안 해줘서 그랬다는 것을 알고 다시 제대로 이해해야겠다는 생각이 들었다. 처음에는 아래처럼 코드를 실행해보았다. private void SimpleButton_Click(object sender, RoutedEventArgs e) { if (true) { MessageBox.Show("1"); e.Handled = true; MessageBox.Show("1-2"); } if (true) { MessageBox.Show("2"); e.Handled = t.. 2023. 10. 16.
[C#] LINQ에서 foreach를 여러 번 쓰면 안되는 이유 LINQ와 foreach var list = new List { new Profile() { Name = "A", Age = 1 }, new Profile() { Name = "B", Age = 2 }, new Profile() { Name = "C", Age = 3 }, new Profile() { Name = "D", Age = 4 }, new Profile() { Name = "E", Age = 5 }, new Profile() { Name = "F", Age = 3 }, }; var a = list.Where(profile => profile.Age > 1); if (a.Any()) { foreach (var profile in a) { Console.WriteLine(profile.Name); .. 2023. 10. 12.
[C#] LINQ의 Single()에 대해서 Single() single은 컬렉션에서 유일한 요소를 반환한다. var list = new List { new Profile() { Name = "A", Age = 1 }, new Profile() { Name = "B", Age = 2 }, new Profile() { Name = "C", Age = 3 }, new Profile() { Name = "D", Age = 4 }, new Profile() { Name = "E", Age = 5 }, new Profile() { Name = "F", Age = 6 } }; var singleList = list.Single(x => x.Age == 3); Console.WriteLine(singleList.ToString()); 위 list에서 Age가 .. 2023. 10. 12.
[C#] 스레드의 크리티컬 섹션(Critical Section) public static void IncrementCounter() { for (int i = 0; i < 100000; i++) { counter++; } } 위 메서드는 counter이라는 변수를 100,000번 반복해서 1씩 올리는 작업을 한다. 만약 이 counter 변수를 같이 증가시키는 스레드가 같이 시작되었다고 해보자. Thread t1 = new Thread(IncrementCounter); Thread t2 = new Thread(IncrementCounter); t1.Start(); t2.Start(); t1.Join(); t2.Join(); t1 스레드도 100,000, t2 스레드도 100,000을 올려서 count는 200,000이 되어야할 것 같지만, 실제로 실행시켜보면 매번 다.. 2023. 10. 11.
[C#] 스레드(Thread) 스레드(Thread) 멀티 스레드 멀티 스레딩은 말 그대로 하나의 프로그램에서 여러 개의 스레드를 동시에 실행하는 것을 의미한다. 각 스레드는 독립적으로 실행되며, 병렬 처리가 가능하기 때문에 성능이 향상될 수 있다. 하지만 너무 과한 멀티 스레딩은 오히려 성능을 저하시키고, 구현이 복잡하기 때문에 적절한 상황에서 사용하여야 한다. 스레드 시작하는 법 1. Thread 인스턴스 생성 2. Thread.Start()로 스레드 시작 3. Thread.Join()으로 스레드 종료 대기 // No Parameter Thread thread = new Thread(Run); thread.Start(); thread.Join(); // Parameter exist Thread thread2 = new Thread(.. 2023. 10. 11.

"); wcs_do();