在Xamarin PLC中不断更新UI

时间:2018-01-19 18:26:56

标签: c# multithreading user-interface xamarin

我的问题是在我的 Xamarin PLC项目中不断更新我的UI。我首先尝试使用线程(System.Threading.Thread),但这个选项在便携式类上不可用(我也想到BackgroundWorker,但我认为这也不可用)。更新的内容来自HTTP request,因此我必须使用异步。我的下一步是使用任务,但我没有得到它。因此,我需要一种方法在显示页面时每秒运行一次异步方法。 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

这很简单。

private async Task DoWork() 
{ 
    while(!stoppped) 
    {
        await YourFunction();
        await Task.Delay(1000);
    }
}

stopped只是一个类变量,可以用来取消该函数。稍后,您可以查看CancellationTokensCancellationTokenSource,以通过更复杂的取消机制替换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
    });