2017-01-25 1 views
0

я создавал головоломки с небольшим количеством информации в различных источниках, чтобы создать это ...Xamarin - пытается создать эквивалент JS setInterval использованием тему

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 
}); 

Идея заключается в том, чтобы создать что-то, обновляющие время этикетки. В этом случае: 500 мс.

Но th.Sleep(500) не позволяют компилировать приложение. В нем говорится: Ошибка CS0176: статический член System.Threading.Thread.Sleep(int) не может получить доступ с помощью ссылки на экземпляр, вместо этого назначьте его с именем типа (CS0176).

ответ

3

Вы можете использовать async для этого.

Интервал

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) { }   
    } 
} 

использования (например, консольное приложение для демонстрации)

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"); 
    } 
} 

Используйте CancellationTokenSource, чтобы отменить выполнение интервала.

+0

Извините .. это не сработает ... потому что это статично ... Похоже, вы не можете обновлять элементы пользовательского интерфейса в статических вызовах. –

+0

Nevermind ... это легко ... Если я отбрасываю статическую декларацию ... работает как шарм;) ty! –

+0

@MarcoJr Метод не использует каких-либо членов экземпляра, поэтому у него нет причин не быть 'static'. – Servy

Смежные вопросы