在Xamarin (C#)中,我有一个使用SlSvcUtil.exe生成的WCF 服务,该服务使用BasicHttpBinding调用。这一切都有效。我所做的只是注册一个回调,调用服务,然后等待数据。
这部分并不重要,但我们必须包装我们的对象才能让WCF发挥得更好。所以我创建了一个函数来包装WCF调用并返回我们未包装对象的列表。这一切也都有效。
问题是,我试图让它从TableViewController内部或 TableViewSource 内部工作。如果我的所有回调都类似于以下内容,则它可以工作:
//Inside TableViewSource
private void Callback(List<MyObject> objects) {
for (int i = 0; i < objects.Count; i++) {
_items.Add(objects[i]);
}
}
但是,我仍然需要调用TableView.ReloadData()
. 调用它失败,因为我不在主 UI 线程上。有一个TableView.BeginInvokeOnMainThread(NSAction action)
函数,但是一个NSAction不能带参数,所以我不能返回我的列表。
我也尝试过发布通知,但由于同样的原因而失败(可能是因为我是从回调内部发布的):
//Inside TableViewController
private void PropertyChanged(NSNotification notification) {
TableView.ReloadData();
// or TableView.BeginInvokeOnMainThread(() => TableView.ReloadData());
}
//Inside TableViewSource
private void Callback(List<MyObject> objects) {
//work here
NSNotificationCenter.DefaultCenter.PostNotificationName("Objects", this);
}
如何将我的列表传递给主 UI 线程并填充我的TableView?我必须在这里遗漏一些简单的东西。