【问题标题】:Please explain this C# code snippet请解释这个 C# 代码片段
【发布时间】:2017-01-01 09:01:51
【问题描述】:

我看到人们写这样的代码

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

如果人们不使用e.Result,为什么他们会分配它。下面没有使用此分配的代码。 但!他们在使用RunWorkerCompleted 事件的一段代码下方编写。 RunWorkerCompleted 事件是否在上升时自动使用e(正好是我分配的e 以上)?

【问题讨论】:

  • e 被发送到匿名事件。为了更好地理解它,您需要反过来看它。 e 的值在右侧分配,但它们在 (sender, e) 内部的左侧定义。

标签: c# events backgroundworker


【解决方案1】:

你是对的。 e.result 可用于RunWorkerCompleted 事件。因为 DoWork 在自己的线程中运行,所以您可以将结果重用于主线程。 Here 你可以阅读更多关于它的信息。 请注意,如果您对现代 C# 多线程用途感兴趣 (>=.Net 3.5)

,backgroundworker 有点老派,请阅读任务库

小例子:

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

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

【讨论】:

    猜你喜欢
    • 2014-04-04
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 2015-08-28
    相关资源
    最近更新 更多