我不知道我是否真的很好地描述了问题标题,但这就是我想要的。
我有一个方法可以从网上返回一些数据并将其添加到List。
public List<info> infos()
{
List<info> datas = new List<info>();
foreach(//)
{
1) // send Api Request
2) // getting Data
3) // Added it to the List
}
return datas;
}
我的GUI中有一个ListView,我希望能够添加从api中检索到的信息并逐个添加到列表中而不是返回整个列表,因为 IT需要长时间加载< / strong>
答案 0 :(得分:0)
使用Microsoft的Reactive Framework(NuGet“System.Reactive”)。
然后你可以这样做:
public IObservable<info> infos()
{
return
from n in Observable.Range(0, 100)
from i in Observable.FromAsync(() => ApiRequestInfo(n))
select i;
}
public Task<info> ApiRequestInfo(int index)
{
// implement your actual API call here.
return Task.Factory.StartNew(() => new info() { Index = index });
}
public class info
{
public int Index;
}
现在,要使用数据,请执行以下操作:
IDisposable subscription =
infos()
.ObserveOn(this) // WinForm: `this` is form
.ObserveOnDispatcher() // WPF
.Subscribe(i =>
{
/* use `i` in your UI */
});
您需要选择.ObserveOn(this)
或.ObserveOnDispatcher()
,具体取决于您的用户界面。
此代码将为您执行所有线程编组。