728x90

C# 52

C#.NET] WMPLib.WindowsMediaPlayer를 이용해서 wav가 아닌 오디오 파일 재생하는 방법

.NET 개발을 하다보면 wav 파일이 아닌 mp3 같은 파일들을 재생해야 할 때가 있다. wav 같은 경우는 System.Media.SoundPlayer를 이용해서 별도의 라이브러리 추가 없이 재생이 가능하지만, 다른 파일들은 별도의 실행 방식을 사용해야 한다. SoundPlayer - wav 파일 일단 기존의 SoundPlayer를 이용해서 wav 파일을 재생하는 방법을 한 번 보자. private SoundPlayer player; player = new SoundPlayer(filePath); // Sync player.Load(); player.PlaySync(); // ASync plyaer.LoadAsync(); player.Play(); // Stop player.Stop(); SoundP..

C#] Dispose 호출해야 하는 경우와 그렇지 않아야 하는 경우

Dispose를 호출해야 하는 경우 '의심 스럽다면 처분 하는 원칙'에 따름. Windows Forms의 컨트롤들, 파일 및 네트워크 스트림, 네트워크 소켓, GDI+의 펜/브러시/비트맵 등이 이에 해당. Dispose를 호출하지 말아야 하는 경우 현재 코드가 객체를 소유한 것이 아니고, 정적 필드나 속성을 통해 공유 객체를 얻은 경우 System.Drawing namespace의 형식에서 정적 필드 및 속성을 통해 얻은 GDI+ 객체 - 응용 프로그램 종료 시점까지 사용 Dispose 메서드가 현재 상황에 맞지 않는 경우 System.IO namespace와 System.Data namespace의 형식들 MemoryStream - 차후 스트림을 다시 쓰는 경우 StreamReader, StreamWr..

C#] 델리게이트(Delegate)의 호환성

타입 호환성 모든 델리게이트 타입은 다른 모든 델리게이트 타입과 호환되지 않음.메서드 대상이 동일한 델리게이트 인스턴스는 상등으로 간주.멀티캐스트 델리게이트는 같은 대상 메서드들이 같은 순서로 등록된 경우에 상등으로 간주. 매개변수 호환성 어떤 메서드를 호출 시, 그 메서드의 매개변수가 요구하는 것보다 구체적인 형식의 인수를 지정할 수 있음.델리게이트의 매개변수 형식이 대상 메서드의 매개변수 형식보다 구체적일 수 있으며, 이를 반변성(Contravariance)라고 함. 이러한 특성은 기본적으로 다형성을 가진 메서드의 정상적인 작동 방식임. 반환 형식의 호환성 어떤 메서드를 호출 시, 호출자가 요구한 것보다 구체적인 형식 값을 메서드가 반환 가능.델리게이트는 대상 메서드의 반환 형식보다 더 구체적으로 반..

WPF, 윈폼] 마우스 커서 위치에 있는 픽셀의 색상값(RGB) 구하는 방법

필요에 의해서 특정 지점에서의 RGB값으로 구성된 색상값을 구하고 싶어서 간단한 유틸리티를 만드는데, 특정 지점에서의 색상값을 구하는 방법을 찾아봤다. MSDN이랑 스택오버플로우를 뒤져보니까 GetPixel이라는 해당 픽셀에서의 색상값을 구하는 윈도우 API가 있다. [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetWindowDC(IntPtr window); [DllImport("gdi32.dll", SetLastError = true)] publ..

[WPF] 프로그램 실행 시 시작 윈도우 변경하는 방법

WPF에서 프로그램을 실행했을 때 가장 먼저 뜨는 윈도우(창)을 변경하고 싶을 때가 있다. 아래 예시를 보자. 처음 WPF 프로젝트를 생성했을 때는 기본적으로 생성된 MainWindow가 프로그램 실행 시 시작 윈도도우로 설정된다. 이 시작 윈도우를 MainWindow가 아니라 만들어진 MainWindow가 아닌 AuthWindow라는 윈도우로 바꾸고 싶다면 App.xaml을 열어보자. App.xaml에 어떠한 변경 사항도 없었다면, Application 태그에서 StartupUri가 MainWindow로 지정된 것을 볼 수 있다. 이것이 프로그램 실행 시 시작 윈도우를 지정하는 부분이다. 이 StartupUri를 AuthWindow.xaml로 변경하면 된다.

윈폼(Winform)에서 폼보더스타일(FormBorderStyle)이 None일 때, 폼 드래그 구현

윈폼에서 폼보더스타일이 None이면 상단에 있는 제목 표시줄이 사라지면서, 폼을 마우스로 드래그해서 옮길 수 없다. 그렇다고 다른 옵션을 선택하기에는 원하는 디자인을 만들 수 없기 때문에 None 옵션을 유지하면서 마우스 드래그 기능을 추가해야 하는데, 간단하게 해결할 수 있다. MouseDown과 MouseMove 이벤트를 이용해서 드래그 기능을 구현할 수 있다. private void MainForm_MouseDown(object sender, MouseEventArgs e) { mousePoint = new Point(e.X, e.Y); } private void MainForm_MouseMove(object sender, MouseEventArgs e) { if ((e.Button & MouseB..

[WPF] Grid 레이아웃과 Col, Row를 이용해서 WPF의 윈도우 레이아웃 짜기

개인적으로 WPF를 이용해서 간단한 윈도우 응용 프로그램을 만들어 보고 있는데, 여기서는 레이아웃을 XAML로 작성한다. 국내에는 WPF 관련한 자료가 많은 편은 아니고, 닷넷은 아무래도 MSDN 문서가 많은 걸 알려주어서 애용하는 편이다. https://docs.microsoft.com/ko-kr/dotnet/framework/wpf/controls/how-to-create-a-grid-element? Grid 레이아웃을 다루는 기초적인 방법으로, Grid.RowDefinitons, Grid.ColDefinitions을 이용해서 행과 열의 개념을 가진 표(Table)처럼 레이아웃을 다루는 방법이 있다. 픽셀(px)를 이용하는 절대적인 크기가 아니라 상대적인 크기 비율만 조정하고 싶을 때는 *을 이용한다..

Unity 주요 함수 정리

Awake스크립트 실행 시 한 번만 호출게임 상태 값, 변수 초기화에 사용함Start 함수 호출 이전에 맨 먼저 호출됨비활성화 상태여도 실행됨코루틴으로 실행 불가능 StartUpdate 함수가 호출되기 전 한 번만 호출스크립트가 활성화되어 있어야 실행다른 스크립트의 모든 Awake가 모두 다 실행된 이후 실행코루틴으로 실행 가능 Update프레임마다 호출되는 함수, 게임의 핵심 로직 작성스크립트 활성화되어 있어야 실행 LateUpdate모든 Update 호출 후 한 번씩 호출순차적으로 실행할 로직에 사용카메라 이동 로직에 주로 사용스크립트가 활성화되어 있어야 실행 FixedUpdate물리 엔진을 사용할 경우, 일정 시간 힘을 가할 때 사용발생 주기 일정 OnEnable게임오브젝트 혹은 스크립트 활성화됐을..

C#] Thread.Sleep 대신 사용할 Delay 함수

System.Threading.Thread.Sleep을 이용해 간단하게 지연이 가능하나, 프로그램 자체를 완전 멈춰버린다.원하던 작업이 이게 아니라면 다른 함수를 사용해야 하는데, 아래 Delay 함수가 꽤 쓸만했다. private static DateTime Delay(int MS) { DateTime ThisMoment = DateTime.Now; TimeSpan duration = new TimeSpan(0, 0, 0, 0, MS); DateTime AfterWards = ThisMoment.Add(duration); while (AfterWards >= ThisMoment) { System.Windows.Forms.Application.DoEvents(); ThisMoment = DateTime...

C#] Parallel 클래스를 이용한 병렬 프로그래밍

2010년 이후로 줄곧 멀티 코어 보급률이 빠르게 늘어, 현 시점에서는 보급형 라인업에도 기본적으로 듀얼 코어가 탑재되는 시점에서, 다수의 코어를 활용하기 위해 .NET Framework 4.0에 추가된 개념. 병렬 루프에 관련한 메서드들을 제공한다. 이것을 이용해서 다수의 데이터를 병렬 처리하거나, 방대한 작업을 병렬 처리하는 것이 가능하다. Parallel.For(), Parallel.Foreach()를 이용해서 병렬로 분할 처리하는 기능을 사용할 수 있으며 병렬 처리를 하는 경우 두 가지 특징이 있다. 단일 스레드로 처리하는 경우보다 더 빠른 처리가 가능함.방대한 양의 데이터를 처리하는 경우, 다른 스레드에서 변경되는 값에 영향을 받지 않는다면 이 방법을 쓰는게 순차 처리하는 경우보다 빠른 시간 내..

728x90