728x90
728x90

정리가 필요한 카테고리(추후 정리)/C#,Unity 43

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..

윈폼(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..

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()를 이용해서 병렬로 분할 처리하는 기능을 사용할 수 있으며 병렬 처리를 하는 경우 두 가지 특징이 있다. 단일 스레드로 처리하는 경우보다 더 빠른 처리가 가능함.방대한 양의 데이터를 처리하는 경우, 다른 스레드에서 변경되는 값에 영향을 받지 않는다면 이 방법을 쓰는게 순차 처리하는 경우보다 빠른 시간 내..

C#] 파일의 MD5 해쉬값 얻어내기

파일의 MD5 해쉬를 얻어내는 코드는 간단하다. private FileInfo item; private byte[] hashcode; item = new FileInfo(filePath); hashcode = MD5.Create().ComputeHash(item.OpenRead()); using System.Security.Cryptography;를 별도로 추가해주면 정상적으로 작동한다. 다만, 해당 코드는 파일의 용량에 따라 해쉬값 연산 속도가 천차 만별이다. 용량이 작은 텍스트 파일 같은 경우는 ms 단위로 처리하고, 용량이 큰 영상 파일 같은 이진 파일은 10초(약 1.5~2GB)가 넘게 걸린다.

[WPF] Keyboard 클래스

Keyboard 클래스에서 키보드 관련 이벤트와 메서드, 키보드에 관련된 속성을 제공. 아래 이벤트를 적절히 이용해서 키보드 관련 처리를 하는 것이 좋음. 컨트롤이 포커스를 받았을 때PreviewGotKeyboardFocusGotKeyboardFocus 컨트롤이 포커스를 잃었을 때PreviewLostKeyboardFocus,LostKeyboardFocus 컨트롤이 논리적 포커스를 받았을 때GotFocus 컨트롤이 논리적 포커스를 잃었을 때LostFocus 키가 눌렸을 때PreviewKeyDownKeyDown 키가 눌렸다 떼어졌을 때PreviewKeyUpKeyUp 컨트롤이 텍스트 입력을 받았을 때PreviewTextInputTextInput

728x90