2011-11-19 2 views
2

이 질문은 약간 주관적인 내용입니다.하지만 기본적으로이 작업을 수행 할 수있는 더 좋은 방법이 있는지 알고 싶습니다.WPF MVVM 명령 동작에서 백그라운드 작업을 수행하는 기본 방법

기본 MVVM 설정이 있습니다. 여기에서 트리 뷰는 트리 구조에 바인딩됩니다.

이 구조에는 필요에 따라로드되는 노드가 있습니다.

노드를 확장하면이 동작에서 명령 동작을 실행하여 필요한 데이터를 쿼리하고이를 노드에 추가합니다.

내 첫 번째 본능은 내가 확장하고있는 노드의 ID를 전달하는 (명령 동작 이벤트 내에서) 배경 작업자를 사용하는 것입니다. 작업이 완료되면 작업자는 해당 노드를 찾고 자식 노드를 추가합니다.

이것은 winforms 개발에서 상속 한 접근 방식입니다. 이것이 더 나은 아키텍처 솔루션이 있다면 궁금합니다.

답변

6

현재 데이터를 메서드로 전달하기가 쉽고 코드를 일반적으로 읽기 쉽고 이해하기 쉬운 일반적인 동기 메서드처럼 보이게 만들기 때문에 Task Parallel Library (TPL)을 사용합니다. 또한 비동기식에 가까워지고 .NET 4.5와 함께 제공 될 코딩 스타일을 기다리고 있으며 Windows 8 프로그래밍에서 실제로 중요합니다.

+0

아름답게 일했습니다. TPL에 관한 모든 것을 잊어 버렸습니다 :) –

2

비동기/대기 패턴을 사용한 Bill의 답변이 좋습니다. 4.0의 경우 Task 객체를 선호합니다 :

Task.Factory.StartNew(Action); 

당신이하는 일에 따라 다르지만. 때로는 진행 지원을 위해 BackgroundWorker을 사용합니다.

+0

UI 스레드에서 완료되었습니다. 작업을 사용하는 경우 UI를 업데이트하기 위해 결과를 어떻게 얻습니까? –

+1

Task.Factory.StartNew (Action) .ContinueWith (UpdateAction); –

+0

업데이트 작업이 UI 스레드에서 실행되는 경우에만 작동합니다. –

관련 문제