C# (17) 썸네일형 리스트형 [C#] Thread Synchronization C#스레드 안전화의 모든것 Thread Synchronization 스레드 동기화 Thread-Safe 한 메서드를 다수의 스레드가 동시에 실행하고 그 메서드에서 클래스 객체의 필드들을 읽거나 쓸때, 다수의 스레드가 동시에 필드값들을 변경할수 있게 됩니다. 객체의 필드값은 모든 스레드가 자유롭게 엑세스할 수 있기 때문에, 메서드 실행 결과가 잘못될 가능성이 큽니다. 이렇게 스레드들이 공유된 자원을 동시에 접근하는것을 박고, 각 스레드들이 순차적,제한적으로 접근하도록 하는것을 스레드 동기화(Thread Synchronization)이라고 합니다. 또한 이렇게 ㅅ레드 동기화를 구현한 메서드나 클래스를 Thread-Safe하다 라고 합니다. .NET의 많은 클래스들은 Thread-Safe하지 않은데, Thread-Safe를 구현하려면 .. [C#] Form 폼 최소화버튼 막기 using System; using System.Windows.Forms; using System.ComponentModel; namespace NoMinimizeTest { public class MinimizeControlForm : Form { private const int WM_SYSCOMMAND = 0x0112; private const int SC_MINIMIZE = 0xf020; ` protected MinimizeControlForm() { AllowMinimize = true; } protected override void WndProc(ref Message m) { if (!AllowMinimize) { if (m.Msg == WM_SYSCOMMAND) { if (m.WParam.To.. [C#] exe 실행파일에 DLL파일을 임베디드하여 배포 하기 1. 사용하고자 하는 dll을 프로젝트에 참조 2. 해당 dll을 프로젝트 리소스에 추가 3. 리소스에 추가된 dll의 속성 -> 빌드작업 속성 값을 포함 리소스로 지정 4. 프로그램 진입점(Program.cs)에 코드를 아래와 같이 변경 /// /// 해당 응용 프로그램의 주 진입점입니다. /// [STAThread] static void Main() { // 리소스 dll 취득 AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Applicatio.. [C#] 일반화 프로그래밍 1. 일반화(Generalization)란? '일반화'는 간단히 말해 서로 다른 개념에서 공통점을 찾는 것이다. 'A'와 'B', 'C'는 분명 다른 단어이지만 '영어'라는 공통점을 가지며, "ABC"와 "가나다"는 분명 다른 글자이지만 '문자'라는 공통점을 가진다. 이렇듯 어떤 개념을 포괄하는 공통된 개념을 찾아 서로 다른 개념들을 하나로 묶어 줄 수 있다. 이것을 일반화(Generalization)라고 한다. 2. 일반화 메소드 그럼 프로그래밍에서도 이런 일반화가 가능하지 않을까? 코드의 서로 다른 개념들 사이에서 공통적인 개념을 찾아 하나의 코드로 묶어주는 것 말이다. 예를들어 int, float, string 등은 분명 다른 타입이다. 하지만 이들은 '변수'라는 개념으로 묶어줄 수 있다. 이전에는.. [C#] 컬렉션 Collection 1. 컬렉션(Collection)? 컬렉션(Collection)은 간단히 말해 데이터 모음(자료구조) 이다. 즉, 우리가 잘 아는 배열이나 스택, 큐 등을 C#에서 컬렉션이라는 이름으로 제공하는 것이다. C#의 컬렉션을 사용하기 위해서는 우선 컬렉션 네임스페이스 사용을 선언해야 한다. Ex) using System.Collections; 이렇게 컬렉션 네임스페이스 사용을 선언한 후에는 원하는 컬렉션을 생성하여 사용할 수 있다. C#에서 제공하는 대표적인 컬렉션은 ArrayList, Queue, Stack, Hashtable 등이 있으며, 간단히 살펴보면 다음과 같다. 2. ArrayList ArrayList는 배열과 비슷한 컬렉션이다. 배열처럼 [] 인덱스로 컬렉션 요소에 접근이 가능하고, 특정 요소를 .. [C#] 프로퍼티 1. C++의 set(), get() C++로 클래스를 만들면 보통 데이터의 은닉성을 위해 변수를 Private나 Protected로 선언하고 , Set()과 get)함수로 변수를 읽고 쓴다. 문제는 클래스의 변수가 많아질수록 set(), get() 함수로 도배되어져가지고 가독성도 떨어지고 변수를 더 추가 할때마다 매번 Set(), Get() 함수를 작성해주어야 하는 불편함이 있다. 은닉성은 지킬수 있지만, 상당히 번거롭고 귀찮은 작업이다. class MyClass { public int Number; private int num { set { num = value; } get { return num; } } } static void Main(string[] args) { MyClass myclass =.. [Factory Method Pattern] 팩토리 메서드 패턴 C# Design Pattern by Csharp Factory Method Pattern ( 팩토리 매서드 패턴 ) 1. Factory Method Pattern 정의 - 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브 클래스에게 맡기게 된다. ( Define an interface for creating an object, but let subClass decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.) - 팩토리 메소드 패턴을 사용하는데에는 몇가지 이유가 있지만.. [C#] 프로그램 중복실행 방지 ( 단일 프로세스만 실행하기 ) Mutex를 이용한 프로세스 통제 실행파일을 여러 번 실행하면 여러 개의 다른 프로세스들이 생성되는데 만약 해당 머시에서 오직 한 프로세스만 실행되도록하길 원한다면, 일반적으로 사용되는 한 방법으로 Mutex를 사용 할 수 있다. Mutex는 프로세스간 동기화 (Sychronization)을 위해 사용되는데, .NET Framework에는 System.Threading.Mutex라는 클래스가 구현되어 있다. //뮤텍스 생성 Mutex m = new Mutex(); //뮤텍스를 획득할 때까지 대기 m.WaitOne(); //뮤텍스 해제 m.ReleaseMutext(); 단일 프로세스만 실행 예제 아래는 머신에서 오직 한 프로세스만 사용하기 위한 예제이다. 머신 전체적으로 한 프로세스만 뜨게 하귀해, 고유의.. 이전 1 2 3 다음