mvvm中的c#后台工作者

时间:2013-07-20 15:11:47

标签: c# wpf backgroundworker

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

我应该用什么来完成这项任务?背景工作者?我该怎么改写呢?我的viewmodel是:

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));
    }
} 

1 个答案:

答案 0 :(得分: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上并返回该工作的任务或任务(TResult)句柄。