我在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#中实现相同的想法吗?
答案 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/