को ठंडा किए बिना लंबे कार्यों को चलाना मैं यूआई को फ्रीज किए बिना पृष्ठभूमि में कोई कार्रवाई करने की कोशिश कर रहा हूं।यूआई
बेशक, मैं इसके लिए पृष्ठभूमिवर्कर का उपयोग कर सकता हूं।
हालांकि, मैं इसे केवल कार्य API के साथ करना चाहता हूं।
मैंने कोशिश की:
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await LongOperation();
}
// It freezes the UI
और
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
var task = Task.Run(()=> LongOperation());
task.Wait();
}
// It freezes the UI
तो मैं BackgroundWorker के लिए वापस जाना चाहिए? या केवल कार्य का उपयोग कर समाधान है?
इतने सारे लोग BackgroundWorker क्यों पसंद नहीं करते हैं? मुझे यह पसंद है और सिंटैक्स को सीधे ढूंढें। – Paparazzi
'BackgroundWorker'' थ्रेड' से कहीं बेहतर है, लेकिन 'कार्य' आधारित API अंततः हावी हो जाएंगे। मेरे पास [एक संबंधित ब्लॉग पोस्ट] है (http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html)। 'कार्य। रुन' के निम्नलिखित फायदे हैं: (1) घोंसले की अनुमति देता है; (2) रद्दीकरण समर्थन एकीकृत 'रद्दीकरण टोकन' प्रणाली का उपयोग करता है; (3) अपवादों को एक सही कॉल स्टैक के साथ अधिक स्वाभाविक रूप से प्रचारित किया जाता है; (4) परिणाम अधिक स्वाभाविक रूप से पुनर्प्राप्त किए जाते हैं; (5) कम संसाधनों का उपयोग करता है (समर्पित थ्रेड के बजाय थ्रेड पूल)। –