我正在使用不同来源的一些信息创建一个拼图来创建这个...
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)。
答案 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
取消执行间隔。