1

我在我的 wpf 应用程序中使用树视图。子元素必须在后台线程中加载。

我应该用什么来完成这项任务?后台工作者?我应该如何重写它?我的视图模型是:

public class SpaceObjectViewModel : TreeViewItemViewModel
{
    private SpaceObject mSpaceObject;
    private BackgroundWorker mBackgroundWorker;  

    public SpaceObjectViewModel(SpaceObject spaceObject, SpaceObjectViewModel parentViewModel)
        : base(parentViewModel, true)
    {
        mSpaceObject = spaceObject;
    }

    public string Name
    {
        get { return mSpaceObject.Name; }
    }

    protected override void LoadChildren()
    {
        foreach (SpaceObject space in DataManager.Instance.Read(mSpaceObject.ObjectId))
            base.Childrens.Add(new SpaceObjectViewModel(space, this));
    }
} 
4

1 回答 1

2

在 .net 4.5 中,您可以像这样使用 async/await:

protected async override void LoadChildren()
{
    foreach (SpaceObject space in await Task.Run(() => DataManager.Instance.Read(mSpaceObject.ObjectId)))
        base.Childrens.Add(new SpaceObjectViewModel(space, this));
}

因为await你需要async在你的签名。

Task.Run(() => ...)将指定的工作排队以在 ThreadPool 上运行,并为该工作返回一个任务或 Task(TResult) 句柄。

于 2013-07-20T18:18:30.710 回答