Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C中的操作回调中检索值_C#_Callback_Delegates - Fatal编程技术网

C# 从C中的操作回调中检索值

C# 从C中的操作回调中检索值,c#,callback,delegates,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&l

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

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?                   
}));
如何从委托检索返回值?

而不是

new Action<string>(delegate { ... })

然后该值将作为s可用。但首先,这是一种奇怪的模式。不要考虑异步空缺,考虑异步任务,不要使用回调,然后使用等待GETAZE…直接得到结果。这假设您在GetArea中确实在做一些需要异步的事情。

中有一个很好的例子

首先,不要使用异步void。第二,委托返回的值是什么?回调被声明为Action,这意味着返回类型为void。没有返回值。这就是空虚的意思。什么意思?
s => { ... }
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);      
   }
}