일단, .NET Framework 기반의 WinForm을 .NET 5로 마이그레이션 하는 방법은 MS의 공식문서로 존재한다. 이 포스팅은 기본적으로 MS의 공식문서 가이드를 따라 간다. .NET 5로 마이그레이션 후 기존 UI와 조금씩 틀어지는 부분이 발생하였고, 이부분은 어쩔 수 없이 개인이 하나씩 확인하며 수정해야 할 듯 싶다. (Windows Forms 데스크톱 앱을 .NET 5로 마이그레이션하는 방법) [ 마이그레이션 과정 ] 0. 준비 1) VisualStudio 2019 2) 프로젝트 백업 1. packages.config 1) 솔루션 탐색기에서 packages.config을 검색 2) packages.config 파일 우클릭 > PackageReference로 마이그레이션 3) 솔루션내 모든..
이 기능은 정확히 말하면 버그는 아니지만, 공공연하게 버그 취급되는 기능이다. 그 이유는 이 기능이 도입된 히스토리를 보면 된다. Windows Vista 시절 어느 윈도우 셸 프로그래머가 도입한 기능이다. 해당 개발자는 이 기능에 대한 어떠한 보고도 없이 적용 했다. 당연히 .NET Framework 개발팀에서는 해당 기능에 대해 누구도 인지하지 못 한 상태였다. 시간이 흐른 후 Windows 7 시절 누군가 이슈로 문의를 한 후에야 알아차렸지만.. 이미 해당 기능이 릴리즈된 후 수 많은 결과물이 나왔을 것이므로, 수정하지 못했다. 아직까지 MS는 공식 Fix버전이나 해당 기능을 On/Off하는 Property를 도입하지 않고 있다. 당연하게도 개발자들의 원성은 자자했고, 스스로 해결법을 찾아 내었다!..
List에 index로 서로의 위치를 변경하고자 할때 쓰인다. ex) Drag&Move로 아이템의 위치를 변경하고자 할때 C#에서 제공하는 함수는 없으며, 확장 메서드로 따로 구현 하여야 한다. public static class ExtensionList { public static void Swap(this List list, int from, int to) { T tmp = list[from]; list[from] = list[to]; list[to] = tmp; } }
Java에서는 기본적으로 지원하는 함수지만, C#에서는 확장메서드로 구현 해줘야 한다. public static class ExtensionList { private static Random _ran = new Random(); public static void Shuffle(this List list) { int to = list.Count; while (to > 1) { int from = _ran.Next(--to + 1); T tmp = list[from]; list[from] = list[to]; list[to] = tmp; } } }
C#에는 오디오 파일을 재생하기 위한 최고의 라이버르리가 존재한다. 사운드 Input부터 믹싱까지 다양한 기능이 있지만, 이 글에서는 단순 오디오 파일의 재생만 다룬다. 1. NuGet에서 NAudio를 검색하여 아래 스크린샷에 체크한 2개를 다운 받는다. - NAudio.Vorbis는 NAudio를 Fork하여 파생된 프로젝트로, 기존 NAudio에서 지원하지 않는 형식인 .oga와 .ogg 파일의 재생을 위해 만들어진 프로젝트다. 2. Player의 재생은 개별 Thread로 해야하며, NAudio 공식 샘플은 async/await로 되어 있다. 이 글에서는 BackgroundWorker로 구현한 코드를 올린다. - 구버전의 NAudio의 경우, 파일에 따라 그에 맞는 WaveStream을 써야 한다..
일반적인 GUI Application과 동일하게 Winform 또한 UI Thread가 MainThread 역할을 하며, 해당 Thread는 SingleThread 방식으로 돌아간다. UI Thread는 기본적으로 Loop를 돌면서 MessageQueue에 담긴 Message를 가져오고, Handler에 전달하는 역할을 한다. 이때 Handler에서 딜레이가 오래 발생할 경우 MessageQueue에 담긴 다음 Message를 실행하지 못하므로, UI 프리징 현상이 발생 한다. 이러한 UI 프리징 현상을 방지하기 위해 시간이 오래 걸리는 작업은 별도의 Thread를 생성하여 처리한 후 결과만 UI에 반영하도록 개발 해야한다. BackgroundWorker, Thread, Task, AsyncCallBac..
WCF의 Client 구현시 Service참조를 하면 Proxy코드가 자동 생성된다. 이때 ServiceClient코드도 자동 생성된다. ServiceClient는 ClientBase를 상속받으며, ClientBase는 IDisposable 인터페이스를 구현하였다. 그렇기 때문에 실제 ServiceClient는 아래와 같은 코드로 사용이 가능하다. (※ ServiceClient는 사용후 필히 Close() 처리를 해줘야 함) using (var client = new ServiceClient()) { client.Hello(); } using 블럭으로 감싼 ServiceClient는 ClientBase에서 구현된 Dispose 함수 내부에서 client.Close()를 호출해준다. 여기서 문제는.. cl..
(프로젝트 파일) * 2019.01.16 내용 수정 - Zoom 기능 추가 (본문 하단 스크린샷에는 없음) - 상단 프로젝트 파일을 최신내용 반영된 파일로 교체 GDI+와 Memento 패턴 공부를 위해 간단한 그림판 프로그램을 만들어 보았다. 1. GDI+ - PictureBox의 OnPaint 함수에서 Graphics를 이용한 그리기 - OnPaint에서 그리기 위해 MouseEvent에서의 정보 저장 - GDI+에 대한 이해 증가 2. Memento 패턴 - Undo/Redo Service를 만들기 위함 - 이미지 자체를 저장해도 되나, 리소스 낭비가 심함 - IMemento interface를 구현한 class에는 그리기에 필요한 정보만 저장 (Color, Path 등) - IMemento 리스트..
A지점에서 B지점까지 차량이동 거리를 알기위해 지도 관련 API를 검색 해보았다. 1. Google Maps Platform(GoogleMap) - 검색어로 장소 찾기 가능 - 해당 장소의 좌표 취득 가능 - A/B 좌표의 차량 이동거리 취득 가능 (일부 국가 제외) 2. Naver 지도 API - 검색어로 장소 찾기 가능 - 해당 장소의 좌표 취득 가능 - A/B 좌표의 차량 이동거리 취득 불가능 3. Kakao 지도 API - 검색어로 장소 찾기 가능 - 해당 장소의 좌표 취득 가능 - A/B 좌표의 차량 이동거리 취득 불가능 4. Tdeveloper(Tmap) 지도 API - 검색어로 장소 찾기 가능 - 해당 장소의 좌표 취득 가능 - A/B 좌표의 차량 이동거리 취득 가능 Google Maps P..
MS SQL 설치 후 Connection이 되지 않을시 확인 사항. 1. 시작 - 모든 프로그램 - Microsoft SQL Server 2014(버전에 따라 다름) - 구성 도구 - SQL Server 2014 구성 관리자 실행 2-1. SQL Server 네트워크 구성 - MSSQLSERVER(설치시 지정한 인스턴스 이름)에 대한 프로토콜 항목 선택 2-2. TCP/IP의 상태가 사용으로 설정되어 있는지 확인 후, 사용 안 함 으로 설정되어 있다면 우클릭 - 사용 클릭 2-3. SQL Server 서비스 항목에서 SQL Server서비스 재시작
- Total
- Today
- Yesterday