2

静的クラスに次のコードがあります。

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);

アップデート。

シャープクラウドは正しいです。その場合、関数は非同期ではありません。exchangecompleted メソッドから別のクラスに値を返す方法について何か良い提案はありますか?

4

1 に答える 1

1

e (RunWorkerCompletedEventArgs のインスタンス) を ExchangeCompleted メソッドに渡す必要があります。そして、渡された e の Result プロパティを使用します。

于 2013-05-02T10:39:51.843 に答える