본문 바로가기
C#

Thread에서 변수 사용 주의

by Falto 2023. 3. 4.
                    for(int i = 0; i < contrastArray.Length; i++)
                    {
                        if (contrastArray[i] > 0)
                        {
                            int a = i;
                            Dispatcher.BeginInvoke(new ThreadStart(() =>
                            {
                                polygon.Points.Add(new System.Windows.Point(a, contrastArray[a]));
                            }));
                        }
                    }

왜 int a라는 변수를 만들었을까? thread 안에서 i를 참조하면 당연히 BeginInvoke가 호출되었을 때의 i값을 가져올 것 같지만... 그렇지 않다. Invoke 시점의 i를 가져오게 된다. 그래서 Invoke가 조금이라도 늦는 순간 i = contrastArray.Length일 때 함수가 호출되어서 오류가 나게 된다. int a = i를 쓰면 이 문제를 해결할 수 있다. for문에서 선언한 i 값이 바뀐다고 a가 바뀌지는 않기 때문이다.

'C#' 카테고리의 다른 글

MultiBinding 간단한 예제  (0) 2023.03.11
인생은 살기 힘들다는데  (0) 2023.03.08
[C#] 오류를 파일에 기록해보자!  (0) 2023.02.21
곰녹음기를 죽이는 방법  (0) 2023.02.19
mciSendString 음질 개선  (0) 2023.02.03

댓글