现在,我正在尝试将Xamarin Forms与I2C设备和Raspberry Pi结合使用。我用C#编程,Raspberry Pi随Windows IoT一起安装。而且我遇到了有关计时器的问题。我想要做的是创建一个System.Threading.Timer并从I2C设备读取数据,然后每秒将其显示在Label上,但是当我尝试显示数据时,错误显示“该应用程序调用了一个接口被编组为另一个线程。”以下代码是我尝试执行的操作。 public void InitSecondTimer(int interval) { secTimer = new Timer(interval); secTimer.Elapsed += new ElapsedEventHandler(timer_Elapsed); secTimer.Start(); Debug.WriteLine("Secondtimer inited"); } private void timer_Elapsed(object sender, ElapsedEventArgs e) { double voltage = 0; InputI2C(ADC0, ref voltage); //Read data from I2C devices ai0.Text = voltage.ToString(); //ai0 is a Label }那我该如何解决这个问题呢?非常感谢您的帮助!
1 回答
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
一System.Threading.Thread.Timer
的已用事件的线程池线程,它没有自己的ACD0(我假设是该设备的接口)运行。相反,您应该使用Xamarin Forms Timer:
穿线
在计时器中运行的任何代码都将在主UI线程上运行。确保您不阻塞UI线程或进行任何密集的计算。如果合适,请确保将代码移至后台线程。
public void InitSecondTimer(int interval)
{
Device.StartTimer(TimeSpan.FromMiliseconds(interval), () =>
{
double voltage = 0;
InputI2C(ADC0, ref voltage); //Read data from I2C devices
ai0.Text = voltage.ToString(); //ai0 is a Label
return true; // True = Repeat again, False = Stop the timer
});
Debug.WriteLine("Secondtimer inited");
}
- 1 回答
- 0 关注
- 138 浏览
添加回答
举报
0/150
提交
取消