Xamarin - 尝试使用Thread

时间:2017-01-25 13:34:34

标签: c# xamarin xamarin.ios

我正在使用不同来源的一些信息创建一个拼图来创建这个...

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)。

1 个答案:

答案 0 :(得分:3)

您可以使用async await。

<强>间隔

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取消执行间隔。