2013-07-20 2 views
1

내 wpf 응용 프로그램에서 treeview를 사용하고 있습니다. 하위 요소는 백그라운드 스레드에서로드해야합니다.mvvm의 C# 배경 작업자

이 작업에는 무엇을 사용해야합니까? 배경 작업자? 어떻게 다시 작성해야합니까? 내 뷰 모델은 다음과 같습니다

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

async 및 wait 문을 사용할 수 있습니다. – 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) 핸들을 반환합니다.