繁体   English   中英

如何在Xamarin.Android中实现线程化?

[英]How to implement threading in Xamarin.Android?

我试图在100ms处发送/发布,并且消息看起来像这样xxxxxxxxxx,所以每隔100ms左右就会调用一次。 我的问题是,我认为这还不够快(例如,如果当前订阅尚未完成,而另一个订阅正在被调用/正在发布消息)

我在想如何继续填充列表,同时用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));
                    }


                });
            });

确保最短执行时间进入实时编程 在智能手机OS上使用某个应用程序,您与我想象的差不多。 唯一“关闭”的东西是任何解释的语言(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM