【问题标题】:How to implement threading in Xamarin.Android?如何在 Xamarin.Android 中实现线程?
【发布时间】:2019-07-31 16:15:06
【问题描述】:

我正在尝试以 100 毫秒发送/发布,消息看起来像这样 x.x.x.x.x.x.x.x.x.x 所以每 100 毫秒左右 subscribe 就会被调用一次。我的问题是,我认为它不够快,(即,如果当前订阅尚未完成并且正在调用另一个订阅/正在发布消息)

我在想,我如何才能继续填充列表,同时使用 Oxyplot 绘制图表。我可以为此使用线程吗?

var x = 0;
channel.Subscribe(message =>
            {
                this.RunOnUiThread(() =>
                {

                    var sample =  message.Data;
                    byte[] data = (byte[])sample;
                    var data1 = System.Text.Encoding.ASCII.GetString(data);
                    var splitData = data1.Split('-');
                    foreach(string s in splitData) //Contains 10
                    {
                        double y = double.Parse(s);
                        y /= 100;
                        series1.Points.Add(new DataPoint(x, y));
                        MyModel.InvalidatePlot(true);
                        x++;
                    }
                    if (x >= xaxis.Maximum)
                    {
                        xaxis.Pan(xaxis.Transform(-1 + xaxis.Offset));
                    }


                });
            });

【问题讨论】:

    标签: c# performance xamarin android-threading


    【解决方案1】:

    保证最短执行时间进入Realtime Programming。有了智能手机操作系统上的应用程序,你就离我想象的那么远了。唯一更“偏离”的是任何解释语言(PHP、Python)。

    您唯一能做的就是定义迭代之间的最短时间。我曾经写过一些示例代码,用于在替代线程中执行此操作。一个基本的限速代码:

    integer interval = 20;
    DateTime dueTime = DateTime.Now.AddMillisconds(interval);
    
    while(true){
      if(DateTime.Now >= dueTime){
        //insert code here
    
        //Update next dueTime
        dueTime = DateTime.Now.AddMillisconds(interval);
      }
      else{
        //Just yield to not tax out the CPU
        Thread.Sleep(1);
      }
    }
    

    请注意,DateTime.Now 仅大约每 18 毫秒返回一次新的东西,所以任何小于 20 的东西都太少了。

    如果您认为自己负担不起最短时间,您可能需要阅读Speed Rant

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多