Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用WCF服务后在主UI线程中填充TableView_C#_Wcf_Asynchronous_Xamarin.ios_Xamarin - Fatal编程技术网

C# 调用WCF服务后在主UI线程中填充TableView

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内部使其工作。如果我的回调功能如下所示,那么它就

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