निजी शून्य लॉग इनबूटोन_लिंक (ऑब्जेक्ट प्रेषक, रूटिंग एवेंट एर्ग्स ई) {var api = new RestAPI ("http: // localhost : 2624 / ", यूजरनामटेक्स्टबॉक्स। पाठ, पासवर्डटैक्सबॉक्स। पासवर्ड); Api.AutenticarUsuarioFinalizado + = (ओ, आर्ग्स) = & gt; {प्रगतिबार। आईआईएसआईटीएंडमीनेट = गलत; प्रगतिबार। विज़िबिलिटी = विज़िबिलिटी। Collapsed; LogInButton.IsEnabled = true; अगर (args.Error) वापसी; अगर (args.Resultado.Autenticado) {}}; api.AutenticarUsuario (); प्रगतिबार। दृश्यता = दृश्यता। दृश्यमान; प्रगतिबारी.आइए निर्धारित करें = सच; LogInButton.IsEnabled = false; } api.AutenticarUsuario (); एक एसिंक्रोनस एसिंक्रोनस कॉल करता है, जब यह किया जाता है तो यह ईवेंट हैंडलर api.AutenticarUsuarioFinalizado को कॉल करता है और लाइन में यह त्रुटि मिली प्रगति बर। आईएसआईएंडर्मिनेट = झूठी; क्योंकि कॉल एक नया धागा खोलता है, मैं इसे कैसे ठीक कर सकता हूँ? यह त्रुटि है: एप्लिकेशन को एक इंटरफ़ेस कहा जाता है जिसे एक अलग थ्रेड के लिए मार्शल किया गया था।
समस्या यह है कि आपका ईवेंट हैंडलर UI थ्रेड पर निष्पादित नहीं करता है। मुझे लगता है कि इसे ठीक करने का सबसे अच्छा तरीका यह है कि TaskCompletionSource : का उपयोग कर अपने ईएपी (ईवेंट-आधारित एसिंक्रोनस पैटर्न) विधि को टैप (टास्क-आधारित एसिंक्रोनस पैटर्न) में कनवर्ट करना है सार्वजनिक स्थैतिक कार्य & lt; Resultado & gt; AutenticarUsuarioAynync (इस RestAPI एपीआई) {var tcs = नया कार्य समाप्ती स्रोत & lt; Resultado & gt; (); Api.AutenticarUsuarioFinalizado + = (प्रेषक, आर्ग्स) = & gt; {If (args.Error) टीसीएस। TrySetException (नया SomeAprprriTeException ()); अन्य टीसीएस। ट्राईसेट रेसल्ट (आर्ग्स रिसेल्टडो); }; api.AutenticarUsuario (); वापसी टीसीएस। टास्क; } एक ?? | प्राइवेट async शून्य LogInButton_Click (ऑब्जेक्ट प्रेषक, RoutedEventArgs ई) {var api = नया RestAPI ("http: // localhost: 2624 /", यूज़रनेम पाठ बॉक्स। पाठ, पासवर्ड टेक्स्टबॉक्स। पासवर्ड); प्रगतिबार। दृश्यता = दृश्यता। दृश्यमान; प्रगतिबारी.आइए निर्धारित करें = सच; LogInButton.IsEnabled = false; कोशिश {var resultado = awi api.AutenticarUsuarioAsync (); अगर (resultado.Autenticado) {// जो कुछ भी}} पकड़ (SomeAppropriateException पूर्व) {// अंत अपवाद को यहाँ} अंत में {ProgressBar.IsInderminate = false; प्रगतिबार। विज़िबिलिटी = विज़िबिलिटी। Collapsed; LogInButton.IsEnabled = true; }} क्योंकि प्रतीक्षा आईएनजी एक कार्य हमेशा मूल संदर्भ पर फिर से शुरू हो जाएगी, आप अपवाद पाने के लिए नहीं जा रहे हैं मार्ग। एक अतिरिक्त लाभ के रूप में, आपको अपना कोड लिखना नहीं है- जैसे आप ईएपी के साथ करते हैं। आपको बाइंडिंग का उपयोग करने पर विचार करना चाहिए, सेटिंग के बजाय आपके UI के गुण मैन्युअल रूप से नियंत्रित करते हैं।
No comments:
Post a Comment