C# + Unity

[C#] Reflection으로 등록된 이벤트 초기화하기 포스트 Teaser

[C#] Reflection으로 등록된 이벤트 초기화하기

카테고리:

1 분 소요

문제 상황 Visual Studio IDE를 사용하면 Winform 환경에서 이벤트를 손 쉽게 추가하거나 제거할 수 있다. 예를 들어 Load 이벤트를 추가한다고 가정하면 자동으로 아래와 같이 작성된다. Form1.cs private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling code here. } Form1.Designer.cs this.Load += new System.EventHandler(this.Form1_Load); 문제는 런타임 도중에 해당 이벤트를 해제해야할 필요가 있을 경우에 발생한다. 자세히 설명하면 이벤트를 해제하기 위해서는 간단히

[C#] C#에서 Visual Basic .NET 함수 호출하기 포스트 Teaser

[C#] C#에서 Visual Basic .NET 함수 호출하기

카테고리:

1 분 소요

Visual Basic .NET 프로젝트 설정 Visual Basic .NET 프로젝트를 C# 프로젝트에 참조 추가하기 솔루션 탐색기에서 C# 프로젝트를 마우스 오른쪽 클릭하고 참조 추가 선택 프로젝트 탭으로 이동하여 Visual Basic .NET 프로젝트를 선택한 뒤 확인 클릭 Visual Basic .NET 함수의 접근 제한자 확인 아래와 같이 Visual Basic .NET 함수가 C#에서 호출되려면 Public Shared 접근 제한자를 가져야 한다. Public Class VbClass Public Shared Function AddNumbers(x As Integer, y As Integer) As Integer Return x + y End Fu

[C#] MMF(Memory-Mapped File)로 IPC(프로세스간 통신, Inter-Process Communication)하기 포스트 Teaser

[C#] MMF(Memory-Mapped File)로 IPC(프로세스간 통신, Inter-Process Communication)하기

카테고리:

7 분 소요

IPC(프로세스간 통신, Inter-Process Communication) IPC(Inter-Process Communication, 프로세스간 통신)는 여러 프로세스가 데이터를 주고받거나 작업을 조율하기 위해 사용하는 메커니즘을 의미한다. IPC는 운영 체제와 애플리케이션 개발에서 필수적인 요소로, 서로 독립적으로 실행되는 프로세스 간에 효율적이고 안전하게 통신할 수 있도록 지원한다. IPC의 주요 기법 1. 파이프 (Pipes) 익명 파이프: 부모-자식 프로세스 간에 데이터 교환 이름 있는 파이프(Named Pipes): 서로 독립적인 프로세스 간 통신 가능 데이터가 일방향 또는 양방향으로 흐름 2. 메시지 큐 (Message Queues) 프로세스 간 메시지를 큐에 넣고

[C#] MemoryCache 클래스로 데이터 캐싱하기 포스트 Teaser

[C#] MemoryCache 클래스로 데이터 캐싱하기

카테고리:

4 분 소요

MemoryCache 클래스 System.Runtime.Caching 네임스페이스의 MemoryCache 클래스는 .NET에서 제공하는 메모리 내 캐싱 솔루션으로, 애플리케이션에서 자주 사용되는 데이터를 메모리에 저장해 빠르게 접근할 수 있게 도와준다. 메모리 캐싱에 특화된 만큼 아래와 같은 특징을 가진다. 메모리 내 캐싱: 데이터를 메모리에 저장하여, 디스크 접근이나 데이터베이스 쿼리보다 훨씬 빠르게 데이터에 접근한다. 정책 기반 관리: 캐시의 항목이 자동으로 삭제되도록 설정할 수 있는 다양한 정책을 제공한다. 예를 들어, 유효 시간(Expiration) 또는 우선 순위(Priority) 설정이 가능하다. 싱글톤 접근: MemoryCache.Default를 사용하여 모든 애플리케이션에서 동

[C#] Thread abort is not supported on this platform. 오류 해결하기. 포스트 Teaser

[C#] Thread abort is not supported on this platform. 오류 해결하기.

카테고리:

3 분 소요

문제 상황 .NET Core 3.1 버전까지의 C#에서는 Thread를 강제종료할 때 아래와 같이 Abort 함수를 사용한다. static void Main(string[] args) { Thread thread = new Thread(foo) { IsBackground = true }; thread.Start(); Thread.Sleep(5000); thread.Abort(); } static void foo() { int i = 0; while (true) { Console.WriteLine(i); i++; Thread.Sleep(1000); } } 하지만, .NET 5 버전 이

[Unity] can only be called from the main thread. 문제 해결하기 포스트 Teaser

[Unity] can only be called from the main thread. 문제 해결하기

카테고리:

2 분 소요

Unity 엔진의 동작 원리 Unity 엔진은 많은 블로그와 Unity 공식 문서에서 아래의 그림과 같이 Main Thread와 Render Thread, Worker Thread들로 구성되어 있다고 설명한다. 위와 같은 구조로 인해서 UI 요소를 변경하는 함수들은 메인 스레드 위에서만 작동한다. 이로 인해서 멀티 스레드 환경에서 메인 스레드가 아닌 다른 스레드가 UI 요소를 변경하면 아래와 같은 메시지를 출력한다. [문제가 된 함수] can only be called from the main thread. [문제가 된 함수]는 메인 스레드에서만 호출할 수 있습니다. 문제 해결 위와 같은 문제를 C#에서는 Invoke를 사용하여 메인 스레드로 호출을 위임하지만, Unity에서는 해당

[C#] TcpClient Class에서 Nagle 알고리즘 적용 해제하기 포스트 Teaser

[C#] TcpClient Class에서 Nagle 알고리즘 적용 해제하기

카테고리:

최대 1 분 소요

TcpClient C#에서의 TcpClient 클래스는 TCP/IP 프로토콜을 사용하여 네트워크 통신을 수행하는 데 사용된다. 이 클래스는 클라이언트 측 TCP 연결을 만들고 관리하는 기능을 제공하는데, 주로 네트워크 기반 응용 프로그램에서 서버와의 통신 또는 다른 클라이언트와의 통신에 사용된다. https://learn.microsoft.com/ko-kr/dotnet/api/system.net.sockets.tcpclient?view=net-8.0 Nagle 알고리즘? https://syudal.kr/post/Network-Nagle알고리즘과-TCPNODELAY/ Nagle 알고리즘 적용 해제하기 TcpClient client = new TcpClient(ip, port) { NoDela

[C#] .NET 8 부터 적용된 제품 버전 접미사 제거하기 포스트 Teaser

[C#] .NET 8 부터 적용된 제품 버전 접미사 제거하기

카테고리:

1 분 소요

소스 링크 빌드 도구 .NET 8부터 도입된 Source Link는 개발자가 라이브러리의 소스 코드를 디버깅할 때 더 쉽게 따라갈 수 있도록 도와주는 기능이다. 이 기능을 사용하면 라이브러리 제공자는 라이브러리를 빌드할 때 소스 코드 파일과 함께 컴파일러가 해당 파일이 정의된 위치를 나타내는 정보를 생성한다. IDE나 디버거는 NuGet 패키지에서 제공되는 Source Link 정보를 사용하여 필요한 경우 소스 코드 파일을 자동으로 다운로드하고 불러오는데, 이는 개발자가 외부 라이브러리의 소스 코드를 보다 쉽게 이해하고 디버깅할 수 있도록 도와준다. https://github.com/dotnet/sourcelink 문제 상황 빌드한 결과가 아래 사진과 같이 제품 버전에 접미사가 붙어서 빌드된다. 사