如何在Xamarin.forms C#中检查数据的长期下载



我正在执行一项任务,在下载数据时,我们会在用户手机上显示ActivityIndicator。现在,当后台下载正在运行时,当前ActivityIndicator显示一个标签"Loading…"。但如果下载时间超过20秒,我需要将标签从"正在加载…"更新为"仍在下载…"。

我正试图弄清楚如何使用C#中的计时器功能来检查我的下载是否已经运行了20秒。根据我的理解,OnTimedEvent((只在设定的时间过去时才会触发,但我需要并行执行下载过程。以下是我正在努力实现的目标。

SetTimer(20000, "Still Downloading...")
// Here while the below api call is running, if it takes more than 20 seconds to complete then fire up the event to update the loading label. 
var response = obj.GetFileData(JsonConvert.SerializeObject(inputJson)); 

下面是我从这里阅读的计时器功能

public static void SetTimer(int timerTime, string eventMessage)
{
if (timerTime > 0)
{ 
_timer = new Timer(timerTime);
_timer.Elapsed += (sender, e) => { OnTimedEvent(eventMessage); };
_timer.AutoReset = false;
_timer.Enabled = true;
}
}
public static void OnTimedEvent(string eventMessage)
{
mylabel.text = eventMessage;
}

我不确定我使用计时器类的方法在这里是否正确。我遇到了多篇关于计时器类的帖子,但他们都在谈论在计时器过期时触发事件,但没有谈论在我的api调用并行运行计时器。

如有任何帮助,我们将不胜感激。

您的意思是标签文本没有从"loading…"更新为"still downloading…"吗?

我认为当您启动OnTimedEvent时,它可能不在MainThread(UIThread(中,因此mylabel.text = eventMessage;将无法按预期工作。

尝试在主线程中运行,如:

public  void OnTimedEvent(string eventMessage)
{
Device.BeginInvokeOnMainThread(() => { mylabel.Text = eventMessage; });
}

相关内容

  • 没有找到相关文章