我的问题是在我的 Xamarin PLC项目中不断更新我的UI。我首先尝试使用线程(System.Threading.Thread
),但这个选项在便携式类上不可用(我也想到BackgroundWorker
,但我认为这也不可用)。更新的内容来自HTTP request
,因此我必须使用异步。我的下一步是使用任务,但我没有得到它。因此,我需要一种方法在显示页面时每秒运行一次异步方法。
我怎么能这样做?
答案 0 :(得分:2)
这很简单。
private async Task DoWork()
{
while(!stoppped)
{
await YourFunction();
await Task.Delay(1000);
}
}
stopped
只是一个类变量,可以用来取消该函数。稍后,您可以查看CancellationTokens
和CancellationTokenSource
,以通过更复杂的取消机制替换stopped
变量。
如果你有一个非常复杂的逻辑使用线程,那么你可以将PCL转换为.netstandard 2.0项目。这种新的库类型支持这些功能。
答案 1 :(得分:0)
如果您将共享代码放在System.Threading.Timer
而不是NetStandard
中,则可以使用PCL
。示例代码为:
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
Task.Run(async () =>
{
await YourFunction;
});
return true; // True = Repeat again, False = Stop the timer
});