2013-07-20 136 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)句柄。