从C#中的Action回调中检索值

时间:2017-07-01 01:39:25

标签: c# callback delegates

我试图使用回调机制从异步方法中检索返回值,如下所示:

public async void GetArea(double latitude, double longitude, Action<String> callback){

   String area = "";

   //code

   callback(area);
}

这就是我称之为这种方法的方式:

GetArea(Position.latitude, Position.longitude, new Action<string>(delegate {
     //how do I retrieve the callback return value here?                   
}));

如何从委托中检索返回值?

2 个答案:

答案 0 :(得分:0)

而不是

new Action<string>(delegate { ... })
你可以说

s => { ... }

然后该值将以“s”的形式提供。但这首先是一个奇怪的模式。考虑异步任务&lt; string&gt;,而不是异步void,不要使用回调,然后使用“await GetArea(...)”直接获取结果。这假设你真的在GetArea中做了一些需要异步的东西。

答案 1 :(得分:0)

MSDN

中有一个很好的例子
using System;
using System.Windows.Forms;

public class TestLambdaExpression
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = s => ShowWindowsMessage(s); 
      else
         messageTarget = s => Console.WriteLine(s);

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}