C# 调用WCF服务后在主UI线程中填充TableView
在Xamarin(C#)内部,我有一个WCF服务由SlSvcUtil.exe生成,该服务由BasicHttpBinding调用。这一切都有效。我所做的就是注册一个回调,调用服务,然后等待数据 这一部分其实并不重要,但我们必须包装我们的对象,以获得WCF,从而更好地发挥作用。因此,我创建了一个函数,它包装了WCF调用,并返回一个未包装对象的列表。这一切都很有效 问题是,我试图从TableViewController内部或TableViewSource内部使其工作。如果我的回调功能如下所示,那么它就可以工作:C# 调用WCF服务后在主UI线程中填充TableView,c#,wcf,asynchronous,xamarin.ios,xamarin,C#,Wcf,Asynchronous,Xamarin.ios,Xamarin,在Xamarin(C#)内部,我有一个WCF服务由SlSvcUtil.exe生成,该服务由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]);
}
}
如何将列表传递到主UI线程并填充我的表格视图?我一定错过了一些简单的东西 看来我刚刚想出来了 我所要做的就是:
//Inside TableViewController
private void Callback(List<MyObject> objects) {
InvokeOnMainThread(() => {
((MyTableViewSource)TableView.Source).AddObjects(objects);
TableView.ReloadData();
});
}
//在TableViewController内部
私有void回调(列出对象){
InvokeOnMainThread(()=>{
((MyTableViewSource)TableView.Source).AddObjects(对象);
TableView.ReloadData();
});
}
InvokeOnMainThread
是在NSObject
上定义的,因此您可以直接调用它,而不是使用TableView。InvokeOnMainThread
就像我以前尝试过的那样。看起来我刚刚解决了这个问题
我所要做的就是:
//Inside TableViewController
private void Callback(List<MyObject> objects) {
InvokeOnMainThread(() => {
((MyTableViewSource)TableView.Source).AddObjects(objects);
TableView.ReloadData();
});
}
//在TableViewController内部
私有void回调(列出对象){
InvokeOnMainThread(()=>{
((MyTableViewSource)TableView.Source).AddObjects(对象);
TableView.ReloadData();
});
}
InvokeOnMainThread
是在NSObject
上定义的,因此您可以直接调用它,而不是像我以前尝试的那样使用TableView.InvokeOnMainThread