2013-07-20 101 views
1

我在我的wpf应用程序中使用了treeview。子元素必须在后台线程中加载。c#mvvm的后台工作人员

我该如何使用该任务?后台工作者?我应该如何重写它?我的视图模型为:

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

Bgw可能工作。你看过如何使用它?你只需要注册它的事件。 –

+0

您可以使用异步和等待语句。 – Joseph

+0

什么样的Base.Children是? – JSJ

回答

2

在.NET 4.5,你可以使用异步/ 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)句柄。