Windows窗体的BackgroundWorker替代方案

jay*_*t55 4 .net c# winforms

是否可以在Windows窗体应用程序中执行此类操作?

我正在尝试找到更新UI的其他方法,而不是一直使用BackgroundWorker.也许这样的事情?:

public List<String> results = new List<String>();

private void button1_Click(object sender, EventArgs e)
{
    When(SomeLongRunningMethod("get") == true)
    {
        // LongRunningMethod has completed.
        // display results on Form.
        foreach(string result in results)
        {
            this.Controls.Add(new Label() { Text = result; Location = new Point(5, (5 * DateTime.Now.Millisecond)); });
        }
    }
}

public void SomeLongRunningMethod(string value)
{
    if(value == "get")
    {
        // Do work.
        results.Add("blah");
    }
}
Run Code Online (Sandbox Code Playgroud)

以上基本上说:" 这样做,当你完成后,将结果添加到表单中."

Ste*_*ary 6

我建议你使用async/ awaitwith Task.Run.请注意,返回结果更清晰:

private void button1_Click(object sender, EventArgs e)
{
  var results = await Task.Run(() => SomeLongRunningMethod("get"));
  foreach(string result in results)
  {
    this.Controls.Add(new Label() { Text = result; Location = new Point(5, (5 * DateTime.Now.Millisecond)); });
  }
}

public List<string> SomeLongRunningMethod(string value)
{
  var results = new List<string>();
  if(value == "get")
  {
    // Do work.
    results.Add("blah");
  }
  return results;
}
Run Code Online (Sandbox Code Playgroud)

我的博客上有一系列博客文章描述了如何Task.Run替代BackgroundWorker.