iphone - 更新文本后无法重绘 UILabel

标签 iphone xamarin.ios

我正在尝试创建一个计时器,它每次更新标签,这是我到目前为止所拥有的:

public override void ViewDidLoad ()
{
    timer = new Timer ();
    timer.Elapsed += new ElapsedEventHandler (TimerOnTick);
    timer.Interval = 1000;
    timer.Start ();
}

private void TimerOnTick (object obj, EventArgs ea)
{
   timerLabel.Text = DateTime.Now.ToString ();
   timerLabel.SetNeedsDisplay ();
}

但这不会更新标签。在调试中,我可以看到正在设置 timerLabel.Text,但我无法更新或重绘 View 。

更新 timerLabel.text 后如何才能重绘 View ?

最佳答案

标签未更新,因为 System.Timers.Timer 在单独的线程上调用处理程序。您不能在主线程以外的线程中更改 ui 元素。

附上要在主线程上执行的处理程序代码:

private void TimerOnTick (object obj, EventArgs ea)
{
   this.InvokeOnMainThread(delegate {
       timerLabel.Text = DateTime.Now.ToString ();
       timerLabel.SetNeedsDisplay ();
   });
}

关于iphone - 更新文本后无法重绘 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6000741/

相关文章:

ios - Xamarin.iOS:将文件保存到 Windows 共享文件夹

ios - 如何使用 Monotouch 或 Xcode 4.2 对 PDF 文件进行数字签名?

c# - 在同一个项目中使用不同SDK版本的框架有什么影响?

ios - Xamarin.Forms ZXing.Net.Mobile 在 iOS 10 上扫描结果后丢失当前页面

android - 智能手机加速度计手势算法

iphone - 如何使用 xcode 4 运行phonegap?

iphone - 如何更改 UIImagePickerController 裁剪框

iphone - 如何使用 Swift 编程在 iOS 8 中退出应用程序并返回主屏幕

iphone - 使用 CGRectZero 框架将 UIView 放置在 UITableView 的中间

c# - 在键入挂起时设置 UITextField 的文本然后使应用程序崩溃