2017-01-01 79 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();