#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. черт возьми, теперь я вижу эту ошибку, спасибо. Но я предполагаю, что моя проблема в том, что я все еще не могу запустить сбор данных в фоновом режиме при редактировании графиков в пользовательском интерфейсе? Есть мысли о том, как это исправить?