मैं डब्ल्यूपीएफ (एमवीवीएम) के साथ काम कर रहा हूं। मैं कुछ सॉफ्टवेयर देखता हूं जो पूरी विंडो को निष्क्रिय कर देता है और जब एक बटन क्लिक किया जाता है तो यह नियंत्रित होता है और यह काम खत्म नहीं होता है।
उदाहरण के लिए, यदि यह बटन कमांड का कोड है:
Thread.Sleep(20000);
इस 20000 के दौरान पूरी विंडो अक्षम है। (या कोई अन्य समय लेने वाला कार्य)
क्या यह एक अच्छा तरीका है? यदि हाँ तो मैं इसे कैसे कर सकता हूँ? मैं IsEnabled
संपत्ति के बारे में जानता हूं, लेकिन मैंने देखा कि सॉफ्टवेयर के कोड में यह शामिल नहीं है, इसलिए मुझे लगता है कि एक और सामान्य तरीका या सेटिंग होनी चाहिए।
1 उत्तर
क्या यह एक अच्छा तरीका है?
नहीं, आपको कभी भी UI थ्रेड को कई सेकंड के लिए ब्लॉक नहीं करना चाहिए। यह उपयोगकर्ता के अनुकूल और बुरा अभ्यास है।
आपको बैकग्राउंड थ्रेड पर किसी भी संभावित रूप से लंबे समय तक चलने वाली विधि को निष्पादित करना चाहिए। ऐसा करने का सबसे आसान तरीका एक कार्य शुरू करना और उसकी प्रतीक्षा करना होगा। यदि आप चाहें तो कार्य को पूरा करने में लगने वाले समय के दौरान आप निश्चित रूप से पूरी विंडो को अक्षम कर सकते हैं, जैसे:
private async Task SomeLongRunningMethod()
{
IsEnabled = false;
await Task.Run(() => Thread.Sleep(20000));
IsEnabled = true;
}
यदि आप एमवीवीएम डिज़ाइन पैटर्न अपनाते हैं तो या तो विंडो की IsEnabled
प्रॉपर्टी सेट करें या व्यू मॉडल की सोर्स प्रॉपर्टी सेट करें। किसी भी तरह से, आपको UI थ्रेड को ब्लॉक नहीं करना चाहिए।
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।