为了账号安全,请及时绑定邮箱和手机立即绑定

Xamarin Forms-称为接口的应用程序已编组为不同的线程

Xamarin Forms-称为接口的应用程序已编组为不同的线程

C#
收到一只叮咚 2021-05-18 21:35:08
现在,我正在尝试将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");

}


查看完整回答
反对 回复 2021-05-23
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信