मैं एक WP7 (विंडोज फोन 7) एप्लिकेशन बनाने के लिए एमवीवीएम लाइट का उपयोग कर रहा हूं। मैं पृष्ठभूमि थ्रेड पर चलाने के लिए मॉडल द्वारा किए गए सभी काम करना चाहता हूं। फिर, जब काम पूरा हो जाता है, तो एक ईवेंट बढ़ाएं ताकि ViewModel डेटा को संसाधित कर सके।विंडोज फोन 7 के लिए पृष्ठभूमि थ्रेड पर फ़ंक्शन कैसे चलाएं?
मुझे पहले ही पता चला है कि मैं एक WP7 ऐप से असीमित रूप से एक प्रतिनिधि को नहीं बुला सकता हूं।
वर्तमान में मैं ThreadPool.QueueUserWorkItem() का उपयोग करने के लिए एक पृष्ठभूमि धागे पर कुछ कोड को चलाने और MVVM लाइट के DispatcherHelper.CheckBeginInvodeOnUI() का उपयोग करने के यूआई धागे पर एक घटना को बढ़ाने के लिए ViewModel संकेत देने के लिए कि डेटा लोड किया गया है कोशिश कर रहा हूँ (जब वे डिज़ाइन-टाइम व्यू प्रदर्शित करने का प्रयास करते हैं तो यह VS2010 और ब्लेंड 4 को क्रैश करता है)।
क्या पृष्ठभूमि थ्रेड पर कुछ कोड चलाने के लिए कोई नमूना कोड है और फिर एक WP7 ऐप के लिए UI थ्रेड पर किसी ईवेंट को प्रेषित करें?
अग्रिम धन्यवाद, जेफ़।
संपादित करें - यहां एक नमूना मॉडल
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....
}
}
प्रदर्शन प्रभावों को दोबारा जांचना न भूलें अनिश्चित प्रगति सलाखों का उपयोग करने के लिए: http://www.jeff.wilcox.name/2010/08/progressbarperftips2/ –
निश्चित रूप से IsDeterminte = गलत जब भी दिखाई नहीं दे रहा है सेट करें। – Micah
सुरक्षित डिस्प्ले का स्रोत अच्छा होगा। – Sam