2016-03-03 16 views
11

में Thread.Sleep का उपयोग मैं निम्नलिखितXamarin.Forms

MainPage = new ContentPage 
{ 
    Content = new StackLayout 
    { 
     Children = 
     { 
      new Button 
      { 
       Text = "Thread.Sleep", 
       Command = new Command(() => 
       { 
        Thread.Sleep(1000); 
        MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x)); 
       }), 
      }, 
      new Button 
      { 
       Text = "Task.Run + Thread.Sleep", 
       Command = new Command(async() => 
       { 
        await Task.Run(() => Thread.Sleep(1000)); 
        MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x)); 
       }) 
      }, 
      new Button 
      { 
       Text = "Device.StartTimer", 
       Command = new Command(() => Device.StartTimer(
        TimeSpan.FromSeconds(1), 
        () => 
        { 
         MainPage.Animate("", x => MainPage.BackgroundColor = Color.FromRgb(x, x, x)); 
         return false; 
        })), 
      }, 
     } 
    } 
}; 

मैं System.Threading और System.Threading.Tasks शामिल निष्पादित करने के लिए चाहते हैं, लेकिन मैं अभी भी

नाम 'थ्रेड' में मौजूद नहीं है वर्तमान संदर्भ

This site पता चलता है कि Thread.SleepXamarin.Forms में इस्तेमाल किया जा सकता है। मेरे पास यह एक साझा परियोजना में है, पीसीएल नहीं।

+1

'Thread.Sleep' से बचा जाना चाहिए (WinForms/WPF/Xamarin.Forms/सिल्वरलाइट/...) क्योंकि यह यूआई थ्रेड को फ्रीज करता है और यूआई को लटकता है। –

+0

यह केवल प्रदर्शन उद्देश्यों के लिए है, लेकिन आपके अतिरिक्त के लिए धन्यवाद। – testing

उत्तर

23

कर सकते हैं आप

एसिंक्रोनस रूप से प्रतीक्षा करने के लिए चाहते हैं के लिए: await Task.Delay(10000);

तुल्यकालिक: Task.Delay(10000).Wait();

लेकिन यूआई धागा अवरुद्ध से बचने के लिए प्रयास करें एक अच्छा उपयोगकर्ता अनुभव सुनिश्चित करने और अपने ऐप को फिर से रखने के लिए sponsive। ,

  • Xamarin.Forms पोर्टेबल कक्षा लाइब्रेरी

    पीसीएल सबसेट तंत्र की वजह से

    :

    Xamarin.Forms

    में Thread.Sleep का उपयोग करते हुए दो Xamarin.Forms टेम्पलेट्स रहे हैं आपके पास Thread.Sleep प्राप्त करने का कोई मौका नहीं है।

    अद्यतन 2017: पीसीएल अब बहिष्कृत हैं। यदि आप .netstandard 2.0 का उपयोग करते हैं, तो आप इसका उपयोग Thread.Sleep का उपयोग कर सकते हैं।

  • Xamarin.Forms साझा परियोजना

    इस टेम्पलेट विभिन्न प्लेटफार्मों कि Thread.Sleep समर्थन नहीं करते हैं। विंडोज यूडब्लूपी, एक्समरिन। एंड्रॉइड और एक्समारिन.आईओएस इसका समर्थन करते हैं, विंडोज फोन 8.1, और विंडोज 8.1 नहीं। यदि आप 2 परियोजनाओं को अनलोड/हटाते हैं, तो समाधान बनाता है। (System.Threading का उपयोग कर भूल जाते हैं नहीं है, अपने App.cs में) लगभग सभी यूआई चौखटे का उपयोग करते समय

+0

जांचें आप सही हैं कि यूआई थ्रेड अवरुद्ध नहीं होना चाहिए। यहां यह केवल प्रदर्शन उद्देश्यों के लिए है। – testing

+0

क्या आपके पास कोई विचार है कि क्यों 'थ्रेड' पहचाना नहीं गया है? लिंक किए गए पृष्ठ पर ऐसा लगता है कि यह किसी भी तरह काम करता है। – testing

+1

मुझे लगता है कि आपके कोर लाइब्रेरी की एक अलग पीसीएल प्रोफाइल की वजह से आपके पास 'थ्रेड स्लीप' नहीं है। पीसीएल में आपके द्वारा चुने गए अधिक समर्थित प्लेटफ़ॉर्म, कम समर्थित वर्ग/फ़ंक्शंस जिनका आप उपयोग कर सकते हैं। –

3

आप

await Task.Delay(milliseconds); 

उपयोग करने के लिए यदि आप अपने धागा में देरी रखना चाहते हैं की कोशिश कर सकते हैं।

अवरुद्ध आप

Task.Delay(TimeSpan.FromSeconds(5)).Wait(); 
+0

आप ऐसा कर सकते हैं, लेकिन यह उदाहरण से अलग है जिसे मैं कोशिश करना चाहता हूं। थ्रेड को पहले बटन के साथ अवरुद्ध नहीं किया जाना चाहिए। क्या आपको पता है कि मैं क्या खो रहा हूं? उप परियोजनाओं में एक संदर्भ? – testing

+0

@testing: - इसे ब्लॉक करने के लिए मेरा जवाब अपडेट किया गया।कृपया –

संबंधित मुद्दे