https://github.com/OH1GIU-P/SxWavePlot

Without datasource. Add new received values to chart

        private bool _run = false;
        private ArrayList _xValues = new ArrayList();
        private int _val = 1;
// add this:
        private int _index = 0;

private void buttonStart_Click
...
                _xValues.Clear();
                _index = 0;
                chart2.DataSource = null;
...

private void buttonStop_Click
...
            _run = false;
            //chart2.DataBind();
            UseWaitCursor = true;
            Task.Run(() =>
            {
                try
                {
                    serialPort1.Close();
                }
                catch { }
            });
            UseWaitCursor = false;
...

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (_run)
            {
                for (int i = _index; i < _xValues.Count; i++)
                {
                    chart2.Series[0].Points.AddY(_xValues[i]);
                }
                _index = _xValues.Count + 1;
                //ArrayList alist = new ArrayList(_xValues);
                //chart2.DataSource = alist;
                //chart2.DataBind();
            }
        }

.NET serial port receive buffer size is 4096 bytes, that should be enough. Arduino serial port TX buffer size is 64 bytes, it might be good idea increase it to 256 bytes and use serial port speed 115200 or 230400 bps.
https://internetofhomethings.com/homethings/?p=927