C#android中的回调

时间:2013-12-10 10:45:23

标签: c# java android

我在Handler上实现了回调(在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#中实现相同的想法吗?

2 个答案:

答案 0 :(得分:1)

事件是要走的路(使用委托)。以下是一些示例代码:

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

答案 1 :(得分:0)

IN Xamarin你仍然会使用这个由关键字“delegate”定义的“内联”方法。 这是因为,回调是函数指针,c#支持这个,java不支持,而xamarin也没有,但是BUT试图产生一个桥。 xamarin的代表在这里描述:

http://docs.xamarin.com/guides/ios/application_fundamentals/delegates,_protocols,_and_events/