पर उपयोग करने वाले विधियों को प्रतिस्थापित करना मेरे प्रश्न कई हैं। चूंकि मैंने देखा। नेट 4.5, मैं बहुत प्रभावित था। दुर्भाग्य से मेरी सभी परियोजनाएं .NET 4.0 हैं और मैं माइग्रेट करने के बारे में सोच नहीं रहा हूं। तो मैं अपना कोड सरल बनाना चाहता हूं।पृष्ठभूमि कार्यकर्ता को async/tpl (.NET 4.0)
वर्तमान में, मेरी कोड है कि आमतौर पर पर्याप्त समय लेने के लिए स्क्रीन को स्थिर करने के अधिकांश, मैं निम्न कार्य करें:
BackgroundWorker bd = new BackgroundWorker();
bd.DoWork += (a, r) =>
{
r.Result = ProcessMethod(r.Argument);
};
bd.RunWorkerCompleted += (a, r) =>
{
UpdateView(r.Result);
};
bd.RunWorkerAsync(args);
ईमानदारी से, मैं इसके बारे में थक गया हूँ। और तर्कसंगत जटिल उपयोगकर्ता इंटरैक्शन होने पर यह एक बड़ी समस्या बन जाती है।
मुझे आश्चर्य है, इस तर्क को सरल कैसे करें? (याद रखें कि मैं साथ हूं। नेट 4.0) मैंने Google द्वारा कुछ चीजें देखी हैं, लेकिन मुझे कुछ भी आसान नहीं है और मेरी जरूरतों के लिए उपयुक्त है।
मैं इस समाधान नीचे सोचा:
var foo = args as Foo;
var result = AsyncHelper.CustomInvoke<Foo>(ProcessMethod, foo);
UpdateView(result);
public static class AsyncHelper
{
public static T CustomInvoke<T>(Func<T, T> func, T param) where T : class
{
T result = null;
DispatcherFrame frame = new DispatcherFrame();
Task.Factory.StartNew(() =>
{
result = func(param);
frame.Continue = false;
});
Dispatcher.PushFrame(frame);
return result;
}
}
मुझे यकीन है कि प्रभाव डिस्पैचर फ्रेम से छेड़छाड़ पर है के बारे में नहीं हूँ। लेकिन मुझे पता है कि यह बहुत अच्छा काम करेगा, उदाहरण के लिए, मैं स्क्रीन को फ्रीज करने के बावजूद नियंत्रण की सभी घटनाओं में इसका उपयोग कर सकता हूं। सामान्य प्रकार, कॉन्वर्सिस, contravariance के बारे में मेरा ज्ञान सीमित है, शायद इस कोड में सुधार किया जा सकता है।
मैंने Task.Factory.StartNew
और Dispatcher.Invoke
का उपयोग करके अन्य चीजों के बारे में सोचा, लेकिन ऐसा कुछ भी नहीं जो दिलचस्प और उपयोग करने में आसान लगता है। क्या कोई मुझे कुछ प्रकाश दे सकता है?
मेरे कोड को सरल बनाने के लिए एक अच्छा विकल्प प्रतीत होता है, मैं पहले से ही कल्पना कर सकता हूं कि इसका उपयोग कैसे किया जाए। हालांकि, क्यू समाधान नहीं होगा कि मैं एक ही विधि निष्पादन में जारी रख सकता हूं? –
@ जे। लिनन मैं आपके वर्तमान कार्य कतार कार्यान्वयन के बारे में पर्याप्त नहीं जानता, लेकिन आप निश्चित रूप से यह वही अवधारणा कार्य कर सकते हैं जो भी हो। यदि आपके पास कार्यान्वयन पर नियंत्रण है तो मैं आपके क्यूइंग तंत्र के रूप में टीपीएल डेटाफ्लो एपीआई (एक्शनब्लॉक) का उपयोग करने की सलाह दूंगा। यद्यपि यह सब कुछ समझने के लिए यह एक पूरी तरह से अलग पोस्ट है। :) –