2017-01-01 4 views
2

사람들이그들은 그것을 사용하지 않을 경우 사람들이 <code>e.Result</code>를 할당 왜 내가 볼

_Worker = new BackgroundWorker(); 
_Worker.DoWork += (sender, e) => e.Result = ((Func<string>)e.Argument)(); 

과 같은 코드를 작성이 C# 코드는 조각 설명해주십시오. 이 과제를 사용하는 코드는 아래와 같습니다. 하지만! 아래 코드를 쓰면 RunWorkerCompleted 이벤트가 발생합니다. RunWorkerCompleted 이벤트가 올라갈 때 자동으로 e을 사용합니까 (정확히 내가 지정한이 e)?

+0

는'e'가 익명으로 전송됩니다 행사. 그것을 조금 더 잘 이해하기 위해서는 그것을 반대로 봐야합니다. 'e'의 값은 오른쪽에 지정되어 있지만'(sender, e)'의 왼쪽에 정의되어 있습니다. –

답변

3

당신 말이 맞습니다. e.result는 RunWorkerCompleted 이벤트에서 사용할 수 있습니다. DoWork는 자체 스레드에서 실행되므로 결과를 기본 스레드로 재사용하는 방법입니다. Here에 대해 자세히 알아볼 수 있습니다. BackgroundWorker에이 조금 oldschool하고 현대 C#을 멀티 스레딩 목적에 관심이 있다면 태스크 라이브러리에 대해 읽어 것을 주의

작은 예 (> = 넷 3.5.) :

_Worker = new BackgroundWorker(); 
_Worker.DoWork += (sender, e) => e.Result = ((Func<string>)e.Argument)(); 

_Worker.RunWorkerCompleted += (sender,e) => textbox.Text = e.Result.ToString();