C# BackgroundWorker 返回一个值

标签 c# backgroundworker

我在静态类中有以下代码:

public static string ExchangeDataAsync(string request)
{
   BackgroundWorker bgWorker = new BackgroundWorker();

   bgWorker.DoWork             += (obj, e) => ExchangeData(request, e);
   bgWorker.RunWorkerCompleted += (obj, e) => ExchangeCompleted(obj, e);

   bgWorker.RunWorkerAsync(); 

   // I NEED T0 RETURN DATA HERE
}

private static void ExchangeData(string request, DoWorkEventArgs e)
{
  // do some work
  e.Result = some_result;   
}

private static void ExchangeCompleted(object sender, RunWorkerCompletedEventArgs e)
{ 
  MessageBox.Show(e.Result.ToString());   
}

它工作正常,我可以在 ExchangeCompleted 方法中看到我的结果。但是我怎样才能在第一种方法中访问这个结果呢?有没有办法从 bgWorker 对象获取结果?

我在另一个类中像这样使用它(因此 ExchangeDataAsync 应该返回一个值):

string response = Global.ExchangeDataAsync(request);

UPD。

sharpcloud 是对的。在这种情况下,函数不是异步的。您对如何从 exchangecompleted 方法返回值到另一个类有什么好的建议吗?

最佳答案

您应该将 e(RunWorkerCompletedEventArgs 的实例)传递给 ExchangeCompleted 方法。并使用传递的 e 的 Result 属性。

关于C# BackgroundWorker 返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335185/

相关文章:

C# SQL 存储过程(插入) - 传递参数和检索参数

c# - 使用 backgroundworker 进行时间控制

c# - 如何对 BackgroundWorker C# 进行单元测试

C# 从BackgroundWorker 更新DataGridView

c# - C#中的BackgroundWorker运行多次

c# - 访问不同命名空间中的枚举

c# - 如何在 ASPX 中引用变量背后的代码?

c# - 如何为通过 Exchange Server 发送的邮件设置 MHT-body?

c# - 尝试在 Share Target 应用中使用 Launcher.LaunchUriAsync 赢得 Win 8

datagridview - "Streaming"结果从BackgroundWorker到DataGridView