मैं Xamarin प्रपत्रों में एक आवेदन कर रहा हूं जिसमें मुझे x समय के लिए प्रत्येक x बार एक विधि कॉल करने की आवश्यकता है (उदाहरण के लिए 2 मिनट के लिए प्रत्येक 5 सेकंड)। यह कैसे किया जा सकता है?

मुझे केवल हर बार एक विधि को कॉल करने के तरीके के बारे में जानकारी मिली है, लेकिन जो मैं ढूंढ रहा हूं उसके लिए यह पर्याप्त नहीं है।

मैंने यही कोशिश की है। यह कॉल MyMethod 15 सेकंड बीत जाने के बाद करता है:

await Task.Delay(new TimeSpan(0, 0, 15)).ContinueWith(async o =>
{
    MyMethod();
});

और यह हर 5 सेकंड में MyMethod कॉल करता है:

var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromSeconds(5);

var timer = new System.Threading.Timer((e) =>
{
    MyMethod();
}, null, startTimeSpan, periodTimeSpan);

मुझे x राशि के लिए प्रत्येक x सेकंड में MyMethod को कॉल करने की आवश्यकता है।

-1
dimioLt 19 जिंदा 2021, 11:35

2 जवाब

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

आप टाइमर के लिए एक सीमा सेकंड निर्धारित कर सकते हैं।

उदाहरण के लिए आप हर 5 सेकंड में 2 मिनट के लिए कुछ करना चाहते हैं।

int sec = 120000; // 2 minutes
int period = 5000; //every 5 seconds

TimerCallback timerDelegate = new TimerCallback(Tick);
Timer _dispatcherTimer = new System.Threading.Timer(timerDelegate, null, period, period);// if you want the method to execute immediately,you could set the third parameter to null

private void Tick(object state)
    {

        Device.BeginInvokeOnMainThread(() =>
        {
            sec -= period;
       
            if (sec >= 0)
            {
                //do something
            }
            else
            {
                _dispatcherTimer.Dispose();

            }
        });
    }
0
Leo Zhu - MSFT 20 जिंदा 2021, 05:09

आप ऐसा कुछ कर सकते हैं:

आपको शायद पृष्ठभूमि में चल रहे थ्रेड की आवश्यकता होगी:

private async void CallMethodEveryXSecondsYTimes(int waitSeconds, int durationSeconds) 
{
    await Task.Run(() => {
        var end = DateTime.Now.AddSeconds(durationSeconds);
        while (end > DateTime.Now)
        {
                Dispatcher.BeginInvokeOnMainThread(() =>
                {
                    YourMethod();
                });
                Thread.Sleep(waitSeconds*1000);
        }
    });
}
-1
Simon Tribus 19 जिंदा 2021, 15:40