2017-01-01 36 views
2

我看到人們這樣寫代碼請解釋一下這個C#代碼片段

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

爲什麼人們分配e.Result如果他們不使用它。下面沒有使用此分配的代碼。 但是!他們在使用RunWorkerCompleted事件的地方寫下一段代碼。 RunWorkerCompleted事件使用e自動升起時(正是這個e以上我指定的)?

+0

'e'發送到匿名事件。爲了更好地理解它,你需要反過來看它。 'e'的值在右側分配,但是它們在'(sender,e)'的左側定義。 –

回答

3

你說得對。 e.result可用於RunWorkerCompleted事件。因爲DoWork在自己的線程中運行,所以您可以將結果重用到主線程。 Here你可以閱讀更多關於它。 注意,BackgroundWorker的是位老校友和閱讀有關的任務庫,如果你有興趣在現代的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();