2017-01-25 13 views
0

Ich war in verschiedenen Quellen ein Puzzle mit einem wenig Informationen der Schaffung dieses ... erstellenXamarin - versuchen, einen äquivalent von JS setInterval erstellen Thema mit

System.Threading.Thread th; 
th = new System.Threading.Thread(new System.Threading.ThreadStart(() => 
{ 
    InvokeOnMainThread(() => 
    { 
     lbMemFree.Text = "memory free: " + NSProcessInfo.ProcessInfo.PhysicalMemory; // this works! 
    }); 
})); 
th.Start(); 
System.Threading.Tasks.Task.Factory.StartNew(() => 
{ 
    th.Sleep(500); // delay execution for 500 ms 
    // more code 
}); 

Die Idee ist, etwas zu schaffen, dass das Update Zeiten rechtzeitig beschriften. In diesem Szenario: 500ms.

Aber die th.Sleep(500) erlauben nicht die App zu kompilieren. Es heißt: Fehler CS0176: Auf den statischen Member System.Threading.Thread.Sleep(int) kann nicht mit einer Instanzreferenz zugegriffen werden, sondern stattdessen mit einem Typnamen (CS0176).

Antwort

3

Sie können Async erwarten für diese verwenden.

Interval

public class Interval 
{ 
    public static async Task SetIntervalAsync(Action action, int delay, CancellationToken token) 
    { 
     try 
     { 
      while (!token.IsCancellationRequested) 
      { 
       await Task.Delay(delay, token); 
       action(); 
      } 
     } 
     catch(TaskCanceledException) { }   
    } 
} 

Nutzung (z Konsolenanwendung für Demo)

class Program 
{ 
    static void Main(string[] args) 
    { 
     var cts = new CancellationTokenSource(); 
     Interval.SetIntervalAsync(DoSomething, 1000, cts.Token); 

     Console.ReadKey(); // cancel after first key press. 
     cts.Cancel(); 
     Console.ReadKey(); 
    } 

    public static void DoSomething() 
    { 
     Console.WriteLine("Hello World"); 
    } 
} 

Verwenden der CancellationTokenSource die Ausführung des Intervalls abzubrechen.

+0

Entschuldigung..das wird nicht funktionieren .. weil es statisch ist ... Sieht so aus, als könnten Sie UI-Elemente nicht in statische Aufrufe aktualisieren. –

+0

Nevermind ... es ist einfach ... Wenn ich die statische Erklärung fallen lasse .. funktioniert wie ein Charme;) ty! –

+0

@MarcoJr Die Methode verwendet keine Instanzenmitglieder, daher gibt es keinen Grund, nicht "statisch" zu sein. – Servy

Verwandte Themen