2014-07-24 1 views
1

는 다음 있다고 가정 :익명 메소드를 사용하여 스레드 만들기 - Closure로 문제를 해결하는 방법?

내가 아는
For i as Integer = 0 To 10 
    For j as Integer = 0 to 10 
     Dim t as New Thread (
      Sub() 
      Console.WriteLine("Hello: " & i & j) 
      End Sub 
    ) 
     t.Start() 
    Next 
Next 

이가 폐쇄 문제하지만이 경우에 대한 익명 메소드를 작성하는 올바른 방법은 ... 나는 그것이 1에서 모든 숫자를 인쇄하고 싶습니다 - "i"는 10, "j"는 1 - 10의 모든 숫자.

답변

3

당신은 내에서 루프를 ij의 로컬 복사본을해야합니다

For i as Integer = 0 To 10 For j as Integer = 0 to 10 Dim iCopy = i Dim jCopy = j Dim t as New Thread ( Sub() Console.WriteLine("Hello: " & iCopy & jCopy) End Sub ) t.Start() Next Next 

그런 다음 당신은 루프의 각 반복에 새로운 iCopyjCopy 변수를 얻을 수 있습니다. "옵션 엄격한 On"으로 사용하는 것을 잊어으로 구운

warning BC42324: Using the iteration variable in a lambda expression may have 
unexpected results. Instead, create a local variable within the loop and assign 
it the value of the iteration variable. 
+0

:

이 조언은 당신이 당신의 원본 코드를 받으셨을 것입니다 경고를 다음의 다만 구체적인 결과입니다! 라이브로 배우십시오! 감사합니다 존! – Denis

관련 문제