2019/04
C# 메모. 크로스 스레드 문제
C# 메모. 크로스 스레드 문제
2019.04.09윈폼에서 개발하다 보면 아래와 같은 오류에 부딪히게 될 때가 있다. 이러한 크로스 스레드(Cross-thread) 문제를 해결하는 방법은 주로 아래와 같이 3가지 방법이 있다. CheckForIllegalCrossThreadCalls를 통해 해결 System.Windows.Forms.Control.Invoke를 통해 해결 System.ComponentModel.BackgroundWorker를 통해 해결 CheckForIllegalCrossThreadCalls 가장 간단한 해결 방법이다. 아래와 같이 코드 한 줄만 작성하면, UI 스레드 외의 스레드를 통해 컨트롤의 Handle에 접근하는 경우를 잡아내지 않도록 만들 수 있다. CheckForIllegalCrossThreadCalls = false; 그러나..
C# 메모. 패턴 매칭(Pattern Matching)
C# 메모. 패턴 매칭(Pattern Matching)
2019.04.07패턴이 있는 Is 표현식(Is-expressions with patterns)아래 예제에서는 상수 패턴(const pattern)과 타입 패턴(type pattern)을 사용한 표현식을 볼 수 있다. public void PrintStars(object o) { if (o is null) return; // 상수 패턴 "null" if (!(o is int i)) return; // 타입 패턴 "int i" WriteLine(new string('*', i)); } 위 예제를 보면 패턴 변수라는 녀석이 등장한다. 표현식 중간에서 패턴 변수를 선언할 수 있고, 자신을 둘러싸고 있는 블럭 내에서 사용할 수도 있는 것을 볼 수 있다. 전에 만나봤던 out 변수란 녀석과 비슷하다. 패턴을 Try로 시작하는 메서..
C# 메모. out 변수(Out variables)
C# 메모. out 변수(Out variables)
2019.04.06기존에는 out 매개변수를 통해 메서드를 호출하려면 먼저 변수를 넘겨주기 위해서 변수를 먼저 선언해야 했다. 보통 전달받는 메서드가 초기화하기 때문에, 이런 변수들을 넘겨주기 전에 초기화하지 않는다. 이와 같은 이유로, var를 사용해 변수를 선언하지 못하고 변수의 타입을 명시적으로 적어주어야만 했다. public void PrintCoordinates(Point p) { int x, y; // 미리 선언해야 함 p.GetCoordinates(out x, out y); WriteLine($"({x}, {y})"); } 하지만 C# 7.0에 와서는 out 변수라는 기능이 추가되면서, 전달인자를 넘겨줄 때 변수를 선언할 수 있게 되었다. public void PrintCoordinates(Point p) {..