मैं अपने डब्ल्यूपीएफ-एप्लिकेशन में "लोडिंग विंडो" को लागू करने की कोशिश कर रहा हूं जिसे दिखाया जाना चाहिए जब क्लाइंट सर्वर पर एक संदेश भेजना चाहता है और फिर प्रतिक्रिया प्राप्त होने के बाद बंद कर दिया जाना चाहिए। जैसा कि मैं async विधियों का उपयोग करता हूं, यह एक बड़ी समस्या नहीं होनी चाहिए, लेकिन किसी तरह विंडो के बाद दिखाती है कि प्रतिक्रिया प्राप्त हुई और तुरंत बंद हो गई (जैसा कि अपेक्षित था)।

यहां कुछ कोड स्निपेट दिए गए हैं

    public async Task<CommunicationMessage> SendAndReadMessageSync(string message, bool showLoadingScreen = true) {

        // Show loading screen if needed
        if (showLoadingScreen == true) {
            await Globals.MessageController.ShowLoadingScreen(); // This method is the second one
        }

        // Send a message to the server
        SendMessageSync(message);

        // Receive the response from the server
        CommunicationMessage response = ReadMessageSync();

        // Close loading screen
        if (showLoadingScreen == true) {
            await Globals.MessageController.CloseLoadingScreen();
        }

        // return the response
        return response;
    }


    public async Task ShowLoadingScreen(string title = "Lade Daten", string message = "Einen Moment Geduld bitte") {

        await Dispatcher.BeginInvoke(new Action(async delegate {

            // Create the loading screen
            LoadingScreen ls = new LoadingScreen(title, message) {
                IsModal = true
            };

            // Store the screen inside list
            loadingScreens.Add(ls);

            // Show the screen
            await this.ShowChildWindowAsync(ls, ChildWindowManager.OverlayFillBehavior.FullWindow);
        }));
    }

निष्पादन के बारे में मेरी सोच यह है कि लोडिंग स्क्रीन SendMessageSync()-विधि से स्वतंत्र रूप से दिखाई देगी जो 10 सेकंड तक चल सकती है। क्लाइंट को प्रतिक्रिया मिलने के बाद लोडिंग स्क्रीन बंद हो जाएगी।

क्या मैं कुछ गलत कर रहा हूँ या मैं कुछ भूल गया हूँ? अगर आपको कुछ और कोड चाहिए तो कृपया मुझे बताएं

बहुत - बहुत धन्यवाद!

3
DirtyNative 29 अगस्त 2016, 13:48

2 जवाब

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

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

2
unkreativ 29 अगस्त 2016, 14:12

इस परिदृश्य में आप Dispatcher.Invoke के बजाय Dispatcher.BeginInvoke का उपयोग कर सकते हैं। डिस्पैचर.इनवोक इस मामले में तुरंत विंडो दिखाएगा।

0
shijeesh 29 अगस्त 2016, 14:11