如何对列表的一部分进行排序?

时间:2019-07-28 07:58:05

标签: c# multithreading xamarin.android

我正在使用PubNub,另一台设备将以一定速度争执地发布消息。这些消息将发送到另一个设备(移动应用程序),该设备将存储在列表中。该消息看起来也像“ 0-1,1-2”,我还在Xamarin上使用Oxyplot。

我该如何对前100条消息进行排序,然后将其绘制出来,对后100条消息进行排序,然后再次对其进行绘制,依此类推。

我之前尝试过的是直接在“订阅”区域中使用Orderby。但是,我认为一旦列表包含大量数据,这将有问题。我想我也应该实现线程化,但是我不知道如何在Xamarin android中使用。还是可以使用计数器?

int temp = 0;
pubnub.AddListener(new SubscribeCallbackExt(
                (o, m) => //message
                {
                    if (m != null)
                    {
                        this.RunOnUiThread(() =>
                        {
                              var splitData = m.Message.ToString().Split('-');
                            try
                            {
                                var x = double.Parse(splitData[0]);
                                var y = double.Parse(splitData[1]);
                                Data.Add(new Sample { Message1 = x Message2= y });
                                Data = Data.OrderBy(a => a.Message1).ToList();
                            }
                            catch(Exception e)
                            {
                                Toast.MakeText(this, e.ToString(), ToastLength.Long).Show();
                            }
                        } 
                       ); 
                    }
                },
                (o, p) =>
                {
                    if (p != null) { Display(p.Event); }

                },
                (o, s) =>
                {
                    if (s != null)
                    {
                        Display(s.Category + " " + s.Operation + " " + s.StatusCode);    
                    }

                }));
            if (temp == 0) //Not sure where to place this. Should I use threading/timer?
            {
                for (int i = 0; i < Data.Count; i++)
                {
                    if ((Data[i].Message1 + 1) == Data[i++].Message1)
                    {
                        series1.Points.Add(new DataPoint(Data[i].Message1, Data[i].Message2));
                        MyModel.InvalidatePlot(true);
                        temp = i++;
                    }
                    else
                    {
                        temp = i++;
                        break;
                    }
                }
            }
            else
            {
                for (int j = temp; j < Data.Count; j++)
                {
                    if ((Data[j].Message1 + 1) == Data[j++].Message1)
                    {
                        series1.Points.Add(new DataPoint(Data[j].Message1, Data[j].Message2));
                        MyModel.InvalidatePlot(true);
                        temp = j++;
                    }
                    else
                    {
                        temp = j++;
                        break;
                    }

                }
            }

0 个答案:

没有答案