我在Xamarin.Android应用程序中运行对WCF服务的调用,如下所示:
WCF.TestCompleted += WCF_TestCompleted;
WCF.TestAsync("stringtest");
它有一个这样的事件处理程序:
public static void WCF_TestCompleted(object sender, TestCompletedEventArgs e)
{
// various code
ListAdapter = new OrdersAdapter(this, order, orderDetail);
}
但是我无法在这个偶数处理程序中访问我的列表适配器,因为“this”没有上下文并期望 Activity 上下文。
如何再次访问主要上下文?
通过阅读StackOverlfow上的帖子,我认为答案是:
ListAdapter = new OrdersAdapter(Application.context, order, orderDetail);
但这会返回错误:
参数1:无法从'Android.Content.Context'转换为'Android.App.Activity'
答案 0 :(得分:0)
您可以在类似Facade的模式类中对WCF对象和活动的引用进行分组:
class WCFFacadeThingy()
{
Activity myActivity;
public WCF;
WCFFacadeThingy(Activity activity)
{
myActivity = activity;
initWCF(); //init the WCF instance in here
WCF.TestCompleted += WCF_TestCompleted;
}
//Note not static method here
public void WCF_TestCompleted(object sender,
TestCompletedEventArgs e)
{
// various code
ListAdapter list = new OrdersAdapter(myActivity, order, orderDetail);
}
}
然后在你的活动的某个地方:
WCFFacadeThingy w = new WCFFacadeThingy(this);
w.WCF.TestAsync("stringtest");
如果需要销毁活动以防止内存泄漏,也可能值得将活动作为弱引用。