如何在 Xamarin.forms C# 中检查长时间下载的数据
How to check for long download of data in Xamarin.forms C#
我正在执行一项任务,在下载数据时,我们会在用户 phone 上显示 ActivityIndicator。现在当前ActivityIndicator在运行后台下载时显示一个标签"Loading..."。但如果下载时间超过 20 秒,我需要将标签从 "Loading..." 更新为 "Still Downloading..." 之类的内容。
我正在尝试弄清楚如何使用 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));
下面是我从 here
中读到的计时器功能
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;
}
我不确定我这里使用定时器class的方法是否正确。我遇到了多个关于计时器 class 的帖子,但他们都在谈论在计时器结束时触发事件,但没有谈论 运行 与我的 api 调用并行的计时器。
如有任何帮助,我们将不胜感激。
你的意思是标签文字没有从"loading..."更新到"still downloading..."?
我想当你启动OnTimedEvent
的时候,它可能不在MainThread(UIThread)中,所以mylabel.text = eventMessage;
不会像预期的那样工作
尝试在主线程中 运行 如:
public void OnTimedEvent(string eventMessage)
{
Device.BeginInvokeOnMainThread(() => { mylabel.Text = eventMessage; });
}
我正在执行一项任务,在下载数据时,我们会在用户 phone 上显示 ActivityIndicator。现在当前ActivityIndicator在运行后台下载时显示一个标签"Loading..."。但如果下载时间超过 20 秒,我需要将标签从 "Loading..." 更新为 "Still Downloading..." 之类的内容。
我正在尝试弄清楚如何使用 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));
下面是我从 here
中读到的计时器功能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;
}
我不确定我这里使用定时器class的方法是否正确。我遇到了多个关于计时器 class 的帖子,但他们都在谈论在计时器结束时触发事件,但没有谈论 运行 与我的 api 调用并行的计时器。
如有任何帮助,我们将不胜感激。
你的意思是标签文字没有从"loading..."更新到"still downloading..."?
我想当你启动OnTimedEvent
的时候,它可能不在MainThread(UIThread)中,所以mylabel.text = eventMessage;
不会像预期的那样工作
尝试在主线程中 运行 如:
public void OnTimedEvent(string eventMessage)
{
Device.BeginInvokeOnMainThread(() => { mylabel.Text = eventMessage; });
}