मैं एक Xamarin प्रपत्र ऐप पर काम कर रहा हूं जिसमें मैं लॉन्च पर कुछ क्रियाएं करना चाहता हूं। जिस विधि को मैं कॉल करना चाहता हूं वह यह जांचने के लिए ज़िम्मेदार है कि क्या कुछ शर्तें पूरी होती हैं, यदि नहीं, तो मैं उपयोगकर्ता को उन कार्यों के बारे में सूचित करने के लिए एक अलर्ट (डिस्प्लेअलर्ट विधि का उपयोग करके) प्रदर्शित करना चाहता हूं ताकि उसे सही करने की अनुमति मिल सके। ऐप्स कार्यों का निष्पादन। दुर्भाग्य से, एंड्रॉइड पर अलर्ट प्रदर्शित नहीं हो रहा है, यह हमेशा नहीं होता है, कभी-कभी यह प्रदर्शित होता है, लेकिन ज्यादातर मामलों में ऐसा नहीं होता है। कुछ शोध करने के बाद मुझे लगता है कि यह मुद्दा थ्रेडिंग से जुड़ा हो सकता है। मैंने कुछ ब्रेकप्वाइंट जोड़े और मैंने देखा कि एंड्रॉइड पर पेज के दिखाई देने से पहले अलर्ट प्रदर्शित करने के लिए जिम्मेदार कोड की लाइन निष्पादित की जा रही है। आईओएस पर सब कुछ ठीक काम करता है (यूआई के लगभग आधे दिखाए जाने पर अलर्ट प्रदर्शित किया जा रहा है)। मैंने मुख्य धागे से सब कुछ निष्पादित करने की कोशिश की है। एंड्रॉइड पर इसने आंशिक रूप से मदद की, अधिक मामलों में अलर्ट सही ढंग से प्रदर्शित किया जा रहा है, हालांकि मैंने अभी भी 100% सटीकता हासिल नहीं की है। इसके अलावा, आईओएस पर उल्लिखित परिवर्तनों के कारण एक ऐप स्प्लैश स्क्रीन पर अटक गया। नीचे कोड के दो संस्करण हैं जिनका मैंने उपयोग करने का प्रयास किया है।

सबसे पहले वह आधार कोड जिसके साथ मैंने शुरुआत की है:

    public partial class App : Application
    {
        MainPage mainPage;
        public static string DatabaseLocation = string.Empty;

        public App(string databaseLocation)
        {
            //All of the UI code is written in C# in MainPage initializer
            mainPage = new MainPage();
            MainPage = new NavigationPage(mainPage);
            DatabaseLocation = databaseLocation;
        }



        protected override async void OnStart()
        {
            base.OnStart();

            //in DoThings there is a code containing DisplayAlert
            await mainPage.DoThings();
        }
    }

नीचे उस कोड का संस्करण है जिसमें मैंने सब कुछ मुख्य धागे पर रखने की कोशिश की है:

public partial class App : Application
    {
        MainPage mainPage;
        public static string DatabaseLocation = string.Empty;

        public App(string databaseLocation)
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                mainPage = new MainPage();
                MainPage = new NavigationPage(mainPage);
            });
            DatabaseLocation = databaseLocation;

        }



        protected override async void OnStart()
        {
            base.OnStart();

            Device.BeginInvokeOnMainThread(async () =>
            await mainPage.DoThings());
        }
    }

मैंने मुख्य थ्रेड से कोड की लाइन चलाने की भी कोशिश की है जो विशेष रूप से अलर्ट प्रदर्शित करने के लिए ज़िम्मेदार है लेकिन इससे भी मदद नहीं मिली है। DoThings MainPage के अंदर एक विधि है।

public async Task DoThings() {

  if (somethingMissing()){
    Device.BeginInvokeOnMainThread(async () =>
      await DisplayAlert("Error", "Fix errors", "Ok"));
  }
  else
  {
    DoStuff();
  }
}
0
M.Chmielewski 22 अगस्त 2019, 12:10

1 उत्तर

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

मेनपेज में आप इस कोड को आजमा सकते हैं

public async Task DoThings() {

  if (somethingMissing()){
    Device.BeginInvokeOnMainThread(async () =>
      await App.Current.MainPage.DisplayAlert("Error", "Fix errors", "Ok"));
  }
  else
  {
    DoStuff();
  }
}
1
R15 22 अगस्त 2019, 09:29