728x90

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

WPF] 어플리케이션 종료 방법

Application.Current.Shutdown() 일반적인 종료 방법. Shutdown을 호출하면 어플리케이션이 종료되며, Shutdown은 WPF에서 암시적으로 호출됨. Shutdown 되는 시기는 정확히 알 수 없지만 Exit 이벤트를 이용해서 실행이 중지되는 시점을 확인하고 필요한 작업을 처리할 수 있음. System.Environment.Exit() 현재 어플리케이션의 모든 쓰레드를 중단시켜 애플리케이션을 종료시키는 방법. 어플리케이션을 즉시 죽일 수 있음. Process.GetCurrentProcess().Kill() 강제로 프로세스를 종료시키는 방법. 강력하지만, 메인 윈도우에 종료 요청을 내리는 방식으로, 즉각적으로 앱에 종료를 요청하지 않아 시간 지연이 발생할 수도 있음.

[WPF] 다른 스레드에서 UI 스레드 쪽에 접근하기

1. 많은 UI 구성 요소에서 호출 스레드가 필요하므로 해당 스레드는 STA여야 합니다. 2. "다른 스레드가 소유하고 있는 오브젝트에 현재 스레드가 접근할 수 없다"(The calling thread cannot access this object because a different thread owns it.) 최근 윈폼 프로그램을 WPF로 바꾸는 과정에서 주기적으로 창을 호출하는 과정에서 위 오류가 발생했다.윈폼에서는 이런 일이 없었지만 WPF에서는 UI 스레드와 그렇지 않은 스레드로 나누고 있어 이런 오류가 발생한다.이럴 때는 Dispatcher.Invoke를 이용하여 해결해야 한다. Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate..

Xamarin] Nuget 패키지 설치 시 오류 해결 방법

Android.Support.v4나 v7, v13 같은 것들을 사용하기 위해 Nuget 패키지를 설치하려고 하는데 설치에 실패하는 경우가 있다. Visual Studio 영문판 오류 메세지 You are trying to install this package into a project that targets 'MonoAndroid,Version=v6.0', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author. Visual Studio 한글판 오류 메세지MonoAndr..

C#WPF] 텍스트박스에 숫자만 입력하게 만들기

명백히 숫자만 들어올 텍스트 박스에는 숫자만 들어가게끔 하는 것이 좋다.유저가 숫자만 입력할 수 있는 컨트롤이라는 것을 인지하게끔 해당 컨트롤에 입력하기 전에 숫자만 입력할 수 있다는 사실을 알리는 것이 가장 효과가 크지만, 호기심으로 혹은 실수로 숫자가 아닌 것이 입력하는 경우가 있기 때문에 입력 자체를 제한하는 것이 필요할 때가 있다. WPF에서는 KeyDown 이벤트나 PreviewKeyDown 이벤트가 발생할 때 아래 메서드를 작동시켜, 해당 컨트롤에 숫자 외의 텍스트가 입력되는 것 자체를 막는 방법을 사용할 수 있다. private void TextBoxFrequency_PreviewKeyDown(object sender, KeyEventArgs e) { if (!Char.IsDigit((cha..

C#] C# 6.0 요약

컴파일러를 C#으로 완벽히 재작성했으며 이를 오픈소스로 공개(Roslyn).컴파일러 파이프라인을 라이브러리를 통해 외부로 노출하여 누구든지 소스에 대해 분석이 가능함. Elvis 연산자 ; 널 상태 연산자해당 연산자 이용 시, 메서드 호출, 형식 멤버 접근 전에 명시적인 널을 확인할 필요가 없어, Null Reference Exception을 마주하지 않아도 됨. Expression-bodied Function ; 표현식 본문 함수표현식 하나로 메서드, 속성, 연산자, 인덱서를 람다로 작성 Property Initializer ; 속성 초기자자동 속성에 초기값을 배정하여 초기화되는 속성을 read-only로 만들 수가 있음.read-only 속성은 생성자에서 설정이 가능하며 이는 불변이 형식 작성 시에 ..

C#] 리스트뷰(ListView) 컬럼 클릭하여 정렬하기

리스트뷰 요소를 잘 보면 상단에 버튼처럼 클릭이 활성화된 항목들이 존재한다. 간혹 뭔가를 만들다 보면, 이들 항목을 기준으로, 즉 해당 칼럼을 기준으로 아이템들을 정렬해야 하는 경우가 생긴다. 이때 해당 리스트뷰(ListView)의 속성의 이벤트 탭에서 ColumnClick이라는 이벤트를 처리할 메서드를 지정하고 그 메서드에서 클릭된 칼럼을 분류, 그에 따른 정렬을 구현해주면 된다. 아래 그림은 DirectoryCleaner라는 말 그대로 디렉토리를 정리해주는 윈폼 프로그램으로 필자가 개인적으로 만들고 있는 프로그램 중 하나다. 특정 디렉토리에 저장된 파일들, 하위 디렉토리의 파일들까지 모두 탐색한 결과를 리스트뷰에 담아서 보여주고 있다. 이름, 경로, 최종 수정일, 용량에 대한 정보를 리스트 뷰에 저장..

Xamarin] Xamarin.Forms 공식 가이드 따라 시작하기

일전에 자마린에서 제공하는 공식 가이드를 따라 'Phoneword'라는 간단한 앱을 만들었는데, 전화번호를 입력 받아 통화를 거는 그 간단한 앱을 통해서 Xamarin.Android에서는 어떤 식으로 앱을 개발하는지 알아봤다. 이번에도 역시 해당 앱을 통해서 Xamarin.Forms에 대해서 경험해보도록 하자. 일단 새 프로젝트를 만들어야 한다.(Ctrl+Shift+N)새 프로젝트 생성 폼에서 'Visual C#>Cross-Platform>Cross Platform App(Xamarin.Forms or Native)'를 선택하고 솔루션 이름을 'Phoneword'로 정해주고 적합한 위치에 프로젝트 경로를 지정해준 후 프로젝트를 생성하자. 곧장 프로젝트가 생성되어 코딩하는 것이 아니라 'New Cross ..

C#] 접근 수정자(Acces Modifier)

캡슐화를 강화하는 목적으로 형식이나 형식의 멤버의 접근성(accessibility)을 설정할 수 있으며, 그 형식이나 멤버에 다른 어떤 형식이나 어셈블리가 접근할 수 있는지 결정함.접근성을 설정하기 위해 형식이나 멤버 선언 시 적용하는 다섯 가지 접근자가 존재함. - public모든 형식과 어셈블리가 접근 가능한 공용.열거형이나 인터페이스의 모든 멤버에는 암묵적으로 이 수준이 적용됨. - internal형식이 속한 어셈블리나 그 어셈블리와 friend 관계인 어셈블리에서만 접근 가능함.비내포 형식(non-nested type; 다른 형식에 내포된 것이 아닌 형식)의 기본 접근성 - private멤버가 속한 형식 안에서만 접근 가능한 전용.이는 클래스나 구조체 멤버들의 기본 접근성. - protected멤..

C#] 리스트뷰 항목(아이템) 더블 클릭 시 항목 읽어오기

C#] 리스트뷰 항목 더블클릭 시 항목 읽어오기 리스트뷰에 있는 항목들에 대해서 더블클릭을 하면그 항목의 정보들에 대해서 조회가 필요한 경우가 있다. 기본적으로 다룰 수 있는 여러 가지 이벤트를 이용하는 방법들이 많다.MouseDown이나 다른 여러 가지 이벤트를 사용하는 꼼수들이 존재하지만내가 원하던 것에 가장 근접한 방식은MouseDoubleClick 이벤트를 이용하는 것이었다. 이벤트 자체는 마우스를 이용해 더블 클릭을 하면 발생하지만,문제는 리스트뷰의 특정 항목에서만 작동하는 게 아니라,리스트뷰에 대한 더블클릭으로 간주되는 것이라서 항목 조회가 되는 건 아니다.(MouseDown이나 Hit를 사용하는 것도 이 때문이지만 구현이 복잡해진다.) 여기서 조금의 꼼수를 부릴 필요가 있다.어떤 항목에 대한..

C#] 하위 디렉토리 내용 검색하기

C#] 하위 디렉토리 내용 검색하기 어떤 디렉토리가 있으면 그 디렉토리 내의 하위 디렉토리를 포함한모든 파일 정보나 디렉토리 정보까지 검색하여 사용해야 하는 일이 있다. 흔히 파일 정보 검색은 Directory클래스나 DirectoryInfo 클래스에서 정의된GetFiles나 GetDirectories를 등을 사용하는데어떤 속성값도 없이 경로만 지정해준 상태에서 목록을 반환하게 하면,선택한 경로 내의 하위 디렉토리에는 접근하지 않는 문제가 발생한다. 모든 하위 디렉토리의 파일 혹은 디렉토리 목록을 조회하는 것이 목적이면메서드의 파라미터에 검색 옵션을 추가해주면 된다. 12Di = new DirectoryInfo(searchPath);FileInfo[] file = Di.GetFiles("*",Search..

728x90