我发现,背景工作者的接口在这方面不方便,因此我倾向于直接使用ThreadPool。
这里的基本思想是:
public class MyViewModel
{
public SomeCollectionType<Widget> Widgets
{
get
{
if(!WidgetFillQueued)
{
WidgetFillQueued = true;
ThreadPool.QueueUserWorkItem(_ =>
{
WidgetLoadStatus = 0;
int totalCount = FetchWidgetCount();
while(_internalWidgetCollection.Count < totalCount && !AbortFill)
{
_internalWidgetCollection.AddRange(FetchMoreWidgets());
WidgetLoadStatus = (double)_internalWidgetCollection.Count / totalCount;
}
WidgetLoadStatus = null; // To indicate complete
});
}
return _internalWidgetCollection;
}
}
}
假设WidgetLoadStatus是一种受《国际不动产合同》约束的扶养财产,《世界不动产基金》的约束制度考虑到保持现状进展显示所需的已准备好的过渡。
假设——内部植被 所有收集更新工作都经过适当修改,还将使调查股更新数据。
在我的实际看法模型中,有许多收集资料,而不是使用WidgetFill Queued和WidgetLoadStatus等个人财产,我使用一个数据结构,追踪所有目前执行的业务,并计算显示的合计状况价值。 但是,上述法典提出了如何适当实施翻新的基本想法。
以上也适用于单项大型物体的装载,例如档案下载: 仅仅在数据被下载之前收集数据,而不是每次都叫AddRange(),然后确定含有数据的财产。 请注意,如果物体本身包括异构体,则必须在宇宙航行联合会的透镜上进行脱射。 要求派遣派遣国这样做。 Begin Invoke from within the thread.