2013-05-02 59 views
2

我在静态类下面的代码:C#BackgoundWorker返回一个值

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方法返回值到另一个类?

+0

如果您的目标是.Net 4.5,您可以使用新的Async/Await功能(http://msdn.microsoft.com/zh-cn/library/vstudio/hh191443.aspx)而不是BackgroundWorker – Mones 2013-05-02 10:05:21

+2

那么为什么它是异步的吗?因为显然你想阻止执行,直到你得到回应。 – pyrocumulus 2013-05-02 10:06:06

+0

我在我的项目中使用.Net 4 – Phantom 2013-05-02 10:06:19

回答

1

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