मैं डब्ल्यूपीएफ (एमवीवीएम) के साथ काम कर रहा हूं। मैं कुछ सॉफ्टवेयर देखता हूं जो पूरी विंडो को निष्क्रिय कर देता है और जब एक बटन क्लिक किया जाता है तो यह नियंत्रित होता है और यह काम खत्म नहीं होता है।

उदाहरण के लिए, यदि यह बटन कमांड का कोड है:

Thread.Sleep(20000);

इस 20000 के दौरान पूरी विंडो अक्षम है। (या कोई अन्य समय लेने वाला कार्य)

क्या यह एक अच्छा तरीका है? यदि हाँ तो मैं इसे कैसे कर सकता हूँ? मैं IsEnabled संपत्ति के बारे में जानता हूं, लेकिन मैंने देखा कि सॉफ्टवेयर के कोड में यह शामिल नहीं है, इसलिए मुझे लगता है कि एक और सामान्य तरीका या सेटिंग होनी चाहिए।

0
user10962741 19 फरवरी 2019, 18:51

1 उत्तर

सबसे बढ़िया उत्तर

क्या यह एक अच्छा तरीका है?

नहीं, आपको कभी भी UI थ्रेड को कई सेकंड के लिए ब्लॉक नहीं करना चाहिए। यह उपयोगकर्ता के अनुकूल और बुरा अभ्यास है।

आपको बैकग्राउंड थ्रेड पर किसी भी संभावित रूप से लंबे समय तक चलने वाली विधि को निष्पादित करना चाहिए। ऐसा करने का सबसे आसान तरीका एक कार्य शुरू करना और उसकी प्रतीक्षा करना होगा। यदि आप चाहें तो कार्य को पूरा करने में लगने वाले समय के दौरान आप निश्चित रूप से पूरी विंडो को अक्षम कर सकते हैं, जैसे:

private async Task SomeLongRunningMethod()
{
    IsEnabled = false;
    await Task.Run(() => Thread.Sleep(20000));
    IsEnabled = true;
}

यदि आप एमवीवीएम डिज़ाइन पैटर्न अपनाते हैं तो या तो विंडो की IsEnabled प्रॉपर्टी सेट करें या व्यू मॉडल की सोर्स प्रॉपर्टी सेट करें। किसी भी तरह से, आपको UI थ्रेड को ब्लॉक नहीं करना चाहिए।

4
mm8 19 फरवरी 2019, 16:15