.NET 프로젝트의 출력 폴더 이름 변경하기
·
C#/Window
.NET 프로젝트를 개발할 때, 기본적으로 빌드 결과물은 bin 폴더 아래에 생성됩니다. 때로는 이 출력 폴더 이름을 변경하고 싶을 수 있습니다. 예를 들어 특정 구성(Debug 또는 Release)에 대한 출력 폴더를 구분하거나, 프로젝트 전체의 출력 폴더 이름을 변경하고 싶은 경우가 있죠..NET 프로젝트의 출력 폴더 이름을 변경하려면 프로젝트 파일(.csproj)을 수정해야 합니다. 다음 단계를 따라 출력 폴더 이름을 변경할 수 있습니다:1. 프로젝트 파일 열기Visual Studio에서 프로젝트를 우클릭하고 "프로젝트 파일 편집"을 선택하거나, 텍스트 편집기로 .csproj 파일을 직접 엽니다.2. 출력 경로 설정 추가프로젝트 파일 내에 다음과 같은 속성을 추가하거나 수정합니다: bin\$(Co..
데드락 문제와 해결 방법
·
C#
데드락(Deadlock)은 동시성 프로그래밍에서 발생할 수 있는 심각한 문제입니다. 데드락이 발생하면 프로그램이 영원히 실행되지 않는 상태에 빠지게 되므로, 이에 대한 이해와 해결 방법을 숙지하는 것이 중요합니다.데드락이란?데드락은 두 개 이상의 스레드가 서로 다른 리소스를 점유하고 있는 상태에서, 서로가 상대방이 점유한 리소스를 요구하면서 발생하는 교착 상태를 말합니다.예를 들어, 스레드 A가 리소스 X를 점유하고 있고, 스레드 B가 리소스 Y를 점유하고 있는데, 스레드 A가 리소스 Y를 요구하고, 스레드 B가 리소스 X를 요구하는 경우 데드락이 발생합니다. 이 상황에서 두 스레드는 서로의 리소스를 기다리게 되어 교착 상태에 빠지게 됩니다.lock 키워드 사용과 데드락lock 키워드는 C#에서 스레드 ..
간단한 메서드 실행 시간 측정기
·
C#
애플리케이션 성능 최적화를 위해서는 메서드 실행 속도를 측정하는 것이 중요합니다. 이를 위해 간단한 Profiler 클래스를 만들어 보았습니다.#regionusing System;using System.Diagnostics;#endregionpublic static class Profiler{ public static T Time(Func method, string methodName) { Stopwatch sw = Stopwatch.StartNew(); T result = method(); sw.Stop(); Console.WriteLine($"{methodName}: {sw.Elapsed.TotalMilliseconds} ms..
Windows Forms PictureBox
·
C#/Window
Windows Forms 애플리케이션을 개발할 때 PictureBox 컨트롤은 매우 유용하게 사용됩니다. 이 컨트롤은 이미지를 표시하고 다양한 이미지 처리 기능을 제공합니다. 이번 포스팅에서는 PictureBox의 주요 기능과 사용법을 자세히 살펴보도록 하겠습니다.PictureBox 기본 사용법PictureBox 컨트롤은 Visual Studio의 도구 상자에서 쉽게 추가할 수 있습니다. 디자인 모드에서 폼에 드래그&드롭하거나, 코드에서 new PictureBox()를 통해 인스턴스를 생성할 수 있습니다. // 디자인 모드에서 PictureBox 추가private PictureBox pictureBox1;// 코드에서 PictureBox 추가this.pictureBox1 = new System.Windo..
RichTextBox에 텍스트 추가하고 자동 스크롤하기
·
C#/Window
Windows Forms 애플리케이션을 개발할 때, 디버깅 및 로깅 용도로 RichTextBox 컨트롤을 사용하는 경우가 많습니다. 이때 RichTextBox에 텍스트를 추가하고 자동으로 스크롤을 내리는 기능은 매우 유용합니다.아래는 RichTextBox에 텍스트를 추가하고 자동으로 스크롤을 내리는 C# 코드입니다 public void AddDebugLog(string message){ if (rchDebug.InvokeRequired) { rchDebug.Invoke(new MethodInvoker(() => { if (rchDebug.Text.Length > 1000000) rchDebug.Clear(); rchDebug.Ap..
비동기 프로그래밍에서 Task.Delay의 독립적인 실행
·
C#/Window
비동기 프로그래밍을 할 때 Task.Delay를 사용하면 각 Task가 독립적으로 실행되는 것을 알아두면 좋습니다. 이 포스팅에서는 Task.Delay를 사용할 때의 핵심 원리와 특징을 살펴보겠습니다.1. 독립적인 실행아래와 같은 코드에서 statusTask와 backgroundTask는 서로 독립적으로 실행됩니다.using System;using System.Threading;using System.Threading.Tasks;public class Program{ private static readonly CancellationTokenSource cts = new CancellationTokenSource(); private static async Task Main(string[] arg..
C# WinForms에서 콘솔 창 띄우기
·
C#
안녕하세요, 프로그래머 여러분! 오늘은 C# WinForms 애플리케이션에서 콘솔 창을 띄우는 두 가지 방법에 대해 알아보겠습니다. 때로는 GUI 애플리케이션에서도 콘솔 출력이 필요한 경우가 있죠. 디버깅이나 로깅 목적으로 유용하게 사용할 수 있습니다. 1. 프로젝트 속성 변경하기첫 번째 방법은 프로젝트 설정을 변경하여 콘솔 창을 활성화하는 것입니다. 1. 솔루션 탐색기에서 프로젝트를 우클릭합니다. 2. '속성'을 선택합니다. 3. '애플리케이션' 탭으로 이동합니다. 4. '출력 형식'을 '콘솔 애플리케이션'으로 변경합니다.이 방법의 장점은 간단하다는 것입니다. 하지만 애플리케이션이 시작될 때 항상 콘솔 창이 표시된다는 점을 유의해야 합니다. 2. AllocConsole API 사용하기두 번째 방법은 W..
C# 프로그램 배포 시 소스 코드 보호하기 : 난독화와 패킹
·
C#
소스 코드 노출C#으로 개발된 프로그램을 배포할 때, 소스 코드가 쉽게 노출될 수 있다는 문제점이 있습니다. 이는 C#이 .NET 프레임워크를 기반으로 하는 관리 코드(managed code) 언어이기 때문입니다. C# 컴파일러는 소스 코드를 직접 기계어로 변환하지 않고, 중간 언어(IL, Intermediate Language)로 변환합니다. 이 IL 코드는 실행 시점에 JIT(Just-In-Time) 컴파일러에 의해 기계어로 변환됩니다. 이로 인해 C#으로 작성된 프로그램의 실행 파일(.exe)이나 라이브러리(.dll)는 디컴파일하기 쉬운 상태로 배포됩니다. 악의적인 사용자가 IL 디컴파일러를 사용하면 원본 소스 코드와 매우 유사한 코드를 쉽게 얻을 수 있습니다.  소스 코드 보호를 위한 방법이러한 ..