मैं अपने डब्ल्यूपीएफ-एप्लिकेशन में "लोडिंग विंडो" को लागू करने की कोशिश कर रहा हूं जिसे दिखाया जाना चाहिए जब क्लाइंट सर्वर पर एक संदेश भेजना चाहता है और फिर प्रतिक्रिया प्राप्त होने के बाद बंद कर दिया जाना चाहिए। जैसा कि मैं 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 सेकंड तक चल सकती है। क्लाइंट को प्रतिक्रिया मिलने के बाद लोडिंग स्क्रीन बंद हो जाएगी।
क्या मैं कुछ गलत कर रहा हूँ या मैं कुछ भूल गया हूँ? अगर आपको कुछ और कोड चाहिए तो कृपया मुझे बताएं
बहुत - बहुत धन्यवाद!
2 जवाब
मैं एक कार्य में संदेश भेजने को समाहित करने का सुझाव दूंगा। अभी यह UI थ्रेड पर चलेगा। तो ऐसा लगता है कि UI थ्रेड व्यस्त है और बस आपकी प्रतीक्षा विंडो नहीं दिखा सकता है।
इस परिदृश्य में आप Dispatcher.Invoke के बजाय Dispatcher.BeginInvoke का उपयोग कर सकते हैं। डिस्पैचर.इनवोक इस मामले में तुरंत विंडो दिखाएगा।
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।