C# Xamarin-尝试使用线程创建JS setInterval的等价物
我正在用不同来源的一些信息制作一个拼图来制作这个C# Xamarin-尝试使用线程创建JS setInterval的等价物,c#,xamarin,xamarin.ios,C#,Xamarin,Xamarin.ios,我正在用不同来源的一些信息制作一个拼图来制作这个 System.Threading.Thread th; th = new System.Threading.Thread(new System.Threading.ThreadStart(() => { InvokeOnMainThread(() => { lbMemFree.Text = "memory free: " + NSProcessInfo.ProcessInfo.PhysicalMemor
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)对其进行限定。您可以使用async Wait进行此操作
间隔
公共类间隔
{
公共静态异步任务SetIntervalAsync(操作操作、int延迟、CancellationToken令牌)
{
尝试
{
而(!token.IsCancellationRequested)
{
等待任务。延迟(延迟,令牌);
动作();
}
}
catch(TaskCanceledException){}
}
}
用法(例如用于演示的控制台应用程序)
类程序
{
静态void Main(字符串[]参数)
{
var cts=新的CancellationTokenSource();
SetIntervalAsync(DoSomething,1000,cts.Token);
Console.ReadKey();//第一次按键后取消。
cts.Cancel();
Console.ReadKey();
}
公共静态无效剂量测定法()
{
Console.WriteLine(“你好世界”);
}
}
使用
CancellationTokenSource
取消间隔的执行。您可以使用async Wait进行此操作
间隔
公共类间隔
{
公共静态异步任务SetIntervalAsync(操作操作、int延迟、CancellationToken令牌)
{
尝试
{
而(!token.IsCancellationRequested)
{
等待任务。延迟(延迟,令牌);
动作();
}
}
catch(TaskCanceledException){}
}
}
用法(例如用于演示的控制台应用程序)
类程序
{
静态void Main(字符串[]参数)
{
var cts=新的CancellationTokenSource();
SetIntervalAsync(DoSomething,1000,cts.Token);
Console.ReadKey();//第一次按键后取消。
cts.Cancel();
Console.ReadKey();
}
公共静态无效剂量测定法()
{
Console.WriteLine(“你好世界”);
}
}
使用
CancellationTokenSource
取消间隔的执行。抱歉..这不起作用..因为它是静态的…看起来你不能将UI元素更新为静态调用。别担心…这很容易…如果我放弃静态声明..效果很好;)泰@MarcoJr该方法没有使用任何实例成员,因此它没有理由不成为静态的
。抱歉..这不起作用..因为它是静态的…看起来你无法将UI元素更新为静态调用。不管怎样…这很容易…如果我放弃静态声明..效果很好;)泰@MarcoJr该方法没有使用任何实例成员,因此它没有理由不保持静态。