private void RecalculateScale() { MyPoint[] plot1 = new MyPoint[0]; double actualWidth = 0; double actualHeight = 0; try { Dispatcher.Invoke(() => { plot1 = Generations.SelectMany(n => n.Points).ToArray(); actualWidth = Plots.ActualWidth; actualHeight = Plots.ActualHeight; }); } catch { } ValueToSet valueToSet = RecalculateScale(plot1, actualWidth, actualHeight, X1, Y1); try { if (!valueToSet.setXY && !valueToSet.setScale) { return; } Dispatcher.Invoke(() => { if (valueToSet.setXY) { X0 = valueToSet.x0; Y0 = valueToSet.y0; X1 = valueToSet.x1; Y1 = valueToSet.y1; } if (valueToSet.setScale) { ScaleX = valueToSet.scaleX; ScaleY = valueToSet.scaleY; } }); } catch { } }