Данные, не добавляющие точки к диаграмме, C#

#c# #winforms #windows-forms-designer

#c# #winforms #windows-forms-designer

Вопрос:

 static void Main(string[] args)
{
    ThreadStart dataRead = new ThreadStart(readInData);
    ThreadStart appStart = new ThreadStart(startApp);
    Thread appThread = new Thread(appStart);
    Thread childThread = new Thread(dataRead);

    appThread.Start();
    childThread.Start(); 
}

public static void startApp()
{
    Application.Run(new Form1());
}

public static void readInData()
{
    Form1 cls = new Form1();
    clock.Start();

    try
    {
        mySerialPort.PortName = "COM3";
        mySerialPort.BaudRate = 9600;
        mySerialPort.DataBits = 8;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.Open();
        Console.WriteLine("Opened");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Sorry! "   ex);
    }

    while (Continue)
    {
        string message = mySerialPort.ReadLine();

        Console.WriteLine(message);
        if (message == "Altituder")
        {
            origAlt = mySerialPort.ReadLine();
            Console.WriteLine(origAlt);
            Continue = false; 
        }
    }

    Continue = true;
    while (Continue)
    {
        TimeSpan timePassed = clock.Elapsed;
        string message = mySerialPort.ReadLine();

        if (stringComparer.Equals("Nextr", message))
        {
            Continue = true;
        }
        Console.WriteLine(message);
        if (message == "Altituder")
        {
            altitude = mySerialPort.ReadLine();
            cls.setChartData(altitude, timePassed.Seconds);

            Console.WriteLine(altitude);
        }
        else if (message == "Temperaturer")
        {
            temperature = mySerialPort.ReadLine();
            cls.setGuageData(temperature);

            Console.WriteLine(temperature);
        }
    }
}

public void setChartData(string alt, int seconds)
{
    chart1.Series["AltitudeChart"].Points.AddXY(seconds, alt);
    chart1.Update();
}
  

Функция setChartData (), вызываемая потоком выше, выполняется корректно, и когда я устанавливаю точки останова, она четко достигает этой точки, которую вы можете видеть с intellisense, что прошлые переменные имеют значения. По какой-то причине точка не добавляется на диаграмму, или, по крайней мере, я не могу заметно видеть, добавляется ли точка. Как я могу исправить эту проблему??

До того, как я начал использовать многопоточность, эта команда работала, визуально добавляя эту точку на диаграмму. Как многопоточность может это нарушать?

Комментарии:

1. Где вы нарушаете циклы?

2. Ранее я прерывал циклы, в настоящее время циклы не прерываются. Цикл while никогда не имеет возможности получить continue = false

3. Вы уверены, что SetChartData находится в потоке пользовательского интерфейса?

4. У вас есть приложение. Запустите новую Form1, а затем в readIndata вы создаете другую новую Form1 под названием cls, которую вы никогда не показываете. Приложениям WinForm также требуется атрибут STAThread.

5. черт возьми, теперь я вижу эту ошибку, спасибо. Но я предполагаю, что моя проблема в том, что я все еще не могу запустить сбор данных в фоновом режиме при редактировании графиков в пользовательском интерфейсе? Есть мысли о том, как это исправить?