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 |
댓글