C#Xamarin计时器类未更新视图
C#Xamarin计时器类未更新视图,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用System.Threading.Tasks; 使用系统计时器; 使用Xamarin.Forms; 名称空间时间测试 { 公共部分类主页:ContentPage { 标签; int i=0; 专用静态系统定时器定时器定时器; 公共主页() { 初始化组件(); 标签=新标签 { Text=”“+i, 垂直选项=布局选项。中心, 水平选项=布局选项。居中 }; 这个。内容=标签
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用系统计时器;
使用Xamarin.Forms;
名称空间时间测试
{
公共部分类主页:ContentPage
{
标签;
int i=0;
专用静态系统定时器定时器定时器;
公共主页()
{
初始化组件();
标签=新标签
{
Text=”“+i,
垂直选项=布局选项。中心,
水平选项=布局选项。居中
};
这个。内容=标签;
SetTimer();
//这个。内容=标签;
}
公共void SetTimer()
{
//创建一个间隔为两秒的计时器。
aTimer=新系统计时器计时器(2000);
//连接计时器的已用事件。
aTimer.appeased+=OnTimedEvent;
aTimer.AutoReset=true;
aTimer.Enabled=true;
}
私有异步void OnTimedEvent(对象源,ElapsedEventArgs e)
{
i++;
label.Text=”“+i;
//这个。内容=标签;
}
}
}
您不在UI线程上,因为计时器回调在后台线程上,在这种情况下更新UI元素时,请使用设备。BeginInvokeOnMainThread
:
因此,在回调中更新标签实例时,请执行以下操作:
Device.BeginInvokeOnMainThread(() => label.Text = "" +i;);
如果我要更新文本并更新另一个元素,我会在label.text=“+1”之后放置一个,还是必须复制整个其他行
提供给BeginInvokeOnMainThread
的参数是一个操作
,因此您可以使用一个“块”在UI线程上执行所需的代码:
或:
你好,宿醉,太好了!谢谢你,我会做一些阅读,我确实有一个关于上面这行的问题。如果我要更新文本并更新另一个元素,我会在label.text=”“+1
之后放置一个,
,还是必须复制整个其他行,例如,Device.beginInvokeMainThread(()=>button.text=“单击我”)代码>@JerodFexlet请查看我的答案更新以获取该问题的答案。
Device.BeginInvokeOnMainThread(() =>
{
...;
...;
...;
});
void UIThreadAction()
{
...;
...;
...;
}
Device.BeginInvokeOnMainThread(UIThreadAction);