我正在使用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;
}
}
}