private void OverrideAddingUpcoming() { lock (UpcomingOrders) { //remove any past due upcoming orders from the list for (int i = 0; i < UpcomingOrders.Count; i++) { if (UpcomingOrders[i].Time.CompareTo(DateTime.Now) < 0) { //order time has passed. it should have been attempted or ordered Dispatcher.Invoke(() => { UpcomingOrders.RemoveAt(i); OnPropertyChanged("UpcomingOrders"); }); } } var timedouble = DateTimeAxis.ToDouble(DateTime.Now); foreach (LineOrder order in ActiveLineOrders) { DataPoint nextorderPoint = new DataPoint(0, 0); var points = (List <DataPoint>)(order.LimitLineSeries.ItemsSource); for (int i = 0; i < points.Count; i++) { if (points[i].X < timedouble) { //nextorderPoint = points[i]; } else { nextorderPoint = points[i]; break; //use previous data point } } if (nextorderPoint.X != 0 && nextorderPoint.Y != 0) { var next = new UpcomingOrder() { Order = order, Price = nextorderPoint.Y.ToString(), Side = (order.OrderSide == OrderSide.Buy ? "Buy" : "Sell"), Time = DateTimeAxis.ToDateTime(nextorderPoint.X), TimeDisplay = DateTimeAxis.ToDateTime(nextorderPoint.X).ToString() }; if (!UpcomingOrders.Any(l => l.Time == next.Time && l.Price == next.Price)) { Dispatcher.Invoke(() => { UpcomingOrders.Add(next); OnPropertyChanged("UpcomingOrders"); }); } else { //already exists } } else { Dispatcher.Invoke(() => { ActionHistory += "Could not determine next Order Point" + "\n"; new Popup("Error Finding Next Order", "Could not determine next Order Point").Show(); }); } } } }
public void StartLookingForUpcomingOrders() { executeThread = new Thread(() => { int count = 500; while (!UpcomingOrdersThreadStopped) { if (count == 500)//wait 5seconds { UpdateOrders(); lock (UpcomingOrders) { //remove any past due upcoming orders from the list for (int i = 0; i < UpcomingOrders.Count; i++) { if (UpcomingOrders[i].Time.CompareTo(DateTime.Now) < 0 || UpcomingOrders[i].StatusCompleted) { //order time has passed. it should have been attempted or ordered Dispatcher.Invoke(() => { UpcomingOrders.RemoveAt(i); OnPropertyChanged("UpcomingOrders"); }); } } count = 0; var timedouble = DateTimeAxis.ToDouble(DateTime.Now); foreach (LineOrder order in ActiveLineOrders) { DataPoint nextorderPoint = new DataPoint(0, 0); var points = (List <DataPoint>)(order.LimitLineSeries.ItemsSource); for (int i = 0; i < points.Count; i++) { if (points[i].X < timedouble) { //nextorderPoint = points[i]; } else { nextorderPoint = points[i]; break; //use previous data point } } if (nextorderPoint.X != 0 && nextorderPoint.Y != 0) { var next = new UpcomingOrder() { Order = order, Price = nextorderPoint.Y.ToString(), Side = (order.OrderSide == OrderSide.Buy ? "Buy" : "Sell"), Time = DateTimeAxis.ToDateTime(nextorderPoint.X), TimeDisplay = DateTimeAxis.ToDateTime(nextorderPoint.X).ToString() }; if (!UpcomingOrders.Any(l => l.Time == next.Time && l.Price == next.Price)) { Dispatcher.Invoke(() => { UpcomingOrders.Add(next); OnPropertyChanged("UpcomingOrders"); }); } else { //already exists } } else { Dispatcher.Invoke(() => { new Popup("Error Finding Next Order", "Could not determine next Order Point").Show(); }); } } } } Thread.Sleep(10); count++; } }); executeThread.Start(); }