У меня есть следующий код в статическом классе: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?
Если вы нацеливаетесь на .Net 4.5, вы можете использовать новую функцию Async/Await feauture (http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx) вместо BackgroundWorker – Mones
. Тогда зачем это асинхронно вообще? Потому что, очевидно, вы хотите заблокировать выполнение, пока не получите ответ. – pyrocumulus
Я использую .Net 4 в своем проекте – Phantom