MVVM Light을 사용하여 WP7 (Windows Phone 7) 응용 프로그램을 작성하고 있습니다. Model에 의해 수행 된 모든 작업을 백그라운드 스레드에서 실행하고 싶습니다. 그런 다음 작업이 완료되면 ViewModel이 데이터를 처리 할 수 있도록 이벤트를 발생시킵니다.Windows Phone 7 용 백그라운드 스레드에서 함수를 실행하는 방법은 무엇입니까?
WP7 앱에서 위임을 비동기 적으로 호출 할 수 없다는 것을 이미 알아 냈습니다.
현재 ThreadPool.QueueUserWorkItem()을 사용하여 백그라운드 스레드에서 일부 코드를 실행하고 MVVM Light의 DispatcherHelper.CheckBeginInvodeOnUI()를 사용하여 데이터가로드 된 ViewModel에 신호를 보내기 위해 UI 스레드에서 이벤트를 발생 시키려고합니다. (디자인 타임보기를 표시하려고 할 때 VS2010과 Blend 4가 충돌합니다).
백그라운드 스레드에 일부 코드를 실행 한 다음 WP7 앱용 UI 스레드로 다시 이벤트를 보내려면 샘플 코드가 있습니까?
미리 감사드립니다. Jeff.
편집 - 다음은 샘플 모델
public class DataModel
{
public event EventHandler<DataLoadingEventArgs> DataLoadingComplete;
public event EventHandler<DataLoadingErrorEventArgs> DataLoadingError;
List<Data> _dataCasch = new List<Data>();
public void GetData()
{
ThreadPool.QueueUserWorkItem(func =>
{
try
{
LoadData();
if (DataLoadingComplete != null)
{
//Dispatch complete event back to the UI thread
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
//raise event
DataLoadingComplete(this, new DataLoadingEventArgs(_dataCasch));
});
}
}
catch (Exception ex)
{
if (DataLoadingError != null)
{
//Dispatch error event back to the UI thread
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
//raise error
DataLoadingError(this, new DataLoadingErrorEventArgs(ex));
});
}
}
});
}
private void LoadData()
{
//Do work to load data....
}
}
성능에 미치는 영향을 두 번 확인하는 것을 잊지 마십시오. indeterminate 진행 막대 사용 : http://www.jeff.wilcox.name/2010/08/progressbarperftips2/ –
명확하게 IsDeterminte = False가 표시되지 않을 때 설정합니다. – Micah
SafeDispatch의 소스가 좋을 것입니다. – Sam