Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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#android中的回调_C#_Java_Android - Fatal编程技术网

C#android中的回调

C#android中的回调,c#,java,android,C#,Java,Android,我已经在处理程序上实现了回调(在java中)。我需要在c#(Xamarin)上实现同样的功能。但到目前为止,我还无法找到用C#如何做到这一点的解决方案。我对c#是新手,因此知识很少 以下是java代码:- private Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (msg.what

我已经在处理程序上实现了回调(在java中)。我需要在c#(Xamarin)上实现同样的功能。但到目前为止,我还无法找到用C#如何做到这一点的解决方案。我对c#是新手,因此知识很少

以下是java代码:-

private Handler handler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg)
    {
      if (msg.what == MSG_SURFACE_CREATED)
      {
        contentWidth = 0;
        contentHeight = 0;
        requestLayout();
        return true;
      } 
      else
      {
        Log.w("Unknown msg.what: " + msg.what);
      }
      return false;
    }
  });

我可以在C#?

中实现同样的功能吗?在Xamarin中,您仍然将使用这个“内联”方法,由关键字“delegate”定义。 这是因为回调是函数指针,c#支持这一点,java不支持,xamarin也不支持,但尝试生成一个桥。 xamarin中的学员如下所述:

事件是前进的方向(使用代理)。以下是一些示例代码:

class CallingClass
{
    private SurfaceCreatingClass m_surfacecreatingclass;

    public CallingClass()
    {
        m_surfacecreatingclass = new SurfaceCreatingClass();
        m_surfacecreatingclass.SurfaceCreatedHandler += OnFinished;
        m_surfacecreatingclass.CreateSurface();
    }

    void OnFinished(int iMessageWhat)
    {
        if (iMessageWhat == SurfaceCreatingClass.MSG_SURFACE_CREATED)
        {
            contentWidth = 0;
            contentHeight = 0;
            RequestLayout();
        }
        else
        {
            Log.w("Unknown msg.what: " + iMessageWhat);
        }
    }
}

class SurfaceCreatingClass
{
    public delegate void SurfaceCreatedDelegate(int iWhat);
    public event SurfaceCreatedDelegate SurfaceCreatedHandler;
    public const int MSG_SURFACE_CREATED = 1;

    public void CreateSurface()
    {
        /////////////////////////////
        // Surface creation code here
        // ...
        /////////////////////////////

        if (SurfaceCreatedHandler != null)
            SurfaceCreatedHandler(MSG_SURFACE_CREATED);
    }
}

谢谢你的关注。如果你能给我一个与我的java代码相关的例子,那会很有帮助。这里有很多:这种方法被称为“观察者可观察模式”。在xamarin研究中,您可以下载“普通样本”。谢谢你的关注,但我很抱歉,因为我是c#的新手。您能指导我如何继续使用问题中的代码吗?我已经修改了代码,使其看起来更像您的原始示例,尽管它仍然与以前基本相同。