2015-06-29 10 views
6

से गायब है। मैं आईओएस एंड्रॉइड और विंडोज फोन 8.1 को .NET 4.5.1 का उपयोग कर एक एक्समरिन क्रॉस प्लेटफ़ॉर्म ऐप बना रहा हूं। जब मैं पीसीएल प्रोजेक्ट में सिस्टम टिमर्स को संदर्भित करने का प्रयास करता हूं, तो यह वहां नहीं होता है। मैं यह कैसे तय करुं?सिस्टम टिमर Xamarin पीसीएल

+0

इस 'व्यवहार' से मेल खाता है और इस प्रकार है क्या वास्तव में 4.5.1 पोर्टेबल में उपलब्ध है। मेरा मानना ​​है कि यह अब 4.5.2 में है, लेकिन यह अब Xamarin/iOS-Andriod पर आपकी सहायता नहीं करता है। विवरण के लिए देखें: http://stackoverflow.com/questions/12555049/timer-in-portable-library – SushiHangover

+1

ने अपने मंचों पर ज़ैमरिन द्वारा भी चर्चा की और जवाब दिया: http://forums.xamarin.com/discussion/17227/timer -इन-पोर्टेबल-क्लास-लाइब्रेरी – SushiHangover

उत्तर

11

आप उपयोग कर सकते हैं: Device.StartTimer

सिंटेक्स:

public static void StartTimer (TimeSpan interval, Func<bool> callback) 

उदाहरण: वेतन वृद्धि संख्या हर 1 सेकंड 1 मिनट

int number = 0; 
Device.StartTimer(TimeSpan.FromSeconds(1),() => { 
    number++; 
    if(number <= 60) 
    { 
     return true; //continue 
    } 
    return false ; //not continue 

}); 

उदाहरण के लिए: 5 सेकंड समारोह को चलाने के लिए के लिए प्रतीक्षा एक बार

Device.StartTimer(TimeSpan.FromSeconds(5),() => { 
    DoSomething(); 
    return false ; //not continue 
}); 
+2

** डिवाइस। स्टार्ट टाइमर ** ** Xamarin.Forms ** का हिस्सा है और यह ज़ैमरिन मूल विकास की ** पोर्टेबल क्लास लाइब्रेरी ** या ** साझा लाइब्रेरी ** के साथ संगत नहीं है ** –

5

मैंने इसे दूसरे दिन देखा। घटनाक्रम कक्षा एपीआई दस्तावेज System.Threading.Timer Class में है .. Annoying।

वैसे भी मैं अपने खुद के टाइमर श्रेणी का निर्माण, Task.Delay() का उपयोग कर:

public class Timer 
{ 

     private int _waitTime; 
     public int WaitTime 
     { 
      get { return _waitTime; } 
      set { _waitTime = value; } 
     } 

     private bool _isRunning; 
     public bool IsRunning 
     { 
      get { return _isRunning; } 
      set { _isRunning = value; } 
     } 

     public event EventHandler Elapsed; 
     protected virtual void OnTimerElapsed() 
     { 
      if (Elapsed != null) 
      { 
       Elapsed(this, new EventArgs()); 
      } 
     } 

     public Timer(int waitTime) 
     { 
      WaitTime = waitTime; 
     } 

     public async Task Start() 
     { 
      int seconds = 0; 
      IsRunning = true; 
      while (IsRunning) 
      { 
       if (seconds != 0 && seconds % WaitTime == 0) 
       { 
        OnTimerElapsed(); 
       } 
       await Task.Delay(1000); 
       seconds++; 
      } 
     } 

     public void Stop() 
     { 
      IsRunning = false; 
     } 
} 
+0

'कार्य का इंतजार। डेले (1000);'। क्यों 1000 और प्रतीक्षा समय नहीं? – AR89

+0

@ AR89 अच्छी जगह, इसे 'वेटटाइम' का उपयोग करने के लिए दोबारा प्रतिक्रिया दी जा सकती है। फिलहाल यह चक्र प्रत्येक 'सेकेंड '(टास्क.डेले (1000)) के चारों ओर चक्र होता है, फिर प्रत्येक' सेकेंड 'अपने मूल्य को' वेटटाइम 'से तुलना करता है यह देखने के लिए कि क्या उसे' टाइमरएप्लेस्ड 'ईवेंट – user1

+0

' आग का इंतजार करना है। डेले (1000); सेकंड ++; OnTimerElapsed(); ' यह एक सही रिफैक्टर होगा? (मैं इसका परीक्षण करूंगा, लेकिन मैं अभी नहीं कर सकता) – AR89

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