Я новичок в C# и создаю панель телеметрии, и одна из кнопок открывает последовательный монитор. Когда я нажимаю кнопку, которая открывает его, мне нужен цикл, который каким-то образом не замораживает другие кнопки, как это было бы в случае с while.
Я пробовал использовать отдельные потоки, но писать в форму для текстового поля и диаграммы, мне нужно, чтобы код находился в том же потоке, что и основной цикл. Есть ли способ, которым, когда я нажимаю кнопку, код, записывающий в диаграммы, будет выполняться каждый раз, когда проходит «цикл» кода? Я пробовал использовать таймер, но у меня не получилось. Ниже я приведу код (извините за лишнийchart_click, удалить без ошибок не получится)
namespace dashboard_telemetry
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
Text = "Dashboard ver. 1";
}
///
/// Open Button
///
///
///
private static System.Timers.Timer aTimer;
private void button1_Click(object sender, EventArgs e)
{
button_open.Text = "Opened";
button_open.Enabled = true;
button_close.Enabled = false;
try
{
serialPort1.PortName = comboBox_port.Text;
serialPort1.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
///
/// Upon loading the Form
///
///
///
private void Form1_Load(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
comboBox_port.Items.Add(port);
}
button_close.Enabled = false;
}
private void button_close_Click(object sender, EventArgs e)
{
button_open.Enabled = false;
button_close.Enabled = true;
serialPort1.Close();
}
private void textBox_Recieve_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click_1(object sender, EventArgs e)
{
// button1_1 is the button that starts logging data to charts
serialPort1.BaudRate = Convert.ToInt32(comboBoxbaud.Text);
if (serialPort1.IsOpen)
{
//This code will only run if I click the button
// but I need it to run over and over
string newPacket = serialPort1.ReadLine();
string[] data = newPacket.Split(',');
tBoxDataIN.Text = newPacket;
chart1.Series["Gyro X"].Points.AddXY(data[1], data[0]);
}
private void chart7_Click(object sender, EventArgs e)
{
}
private void label_port_Click(object sender, EventArgs e)
{
}
private void comboBox_port_SelectedIndexChanged(object sender, EventArgs e)
{
}
private static void SetTimer()
{
// Create a timer with a two second interval.
aTimer = new System.Timers.Timer(100);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent;
aTimer.AutoReset = true;
aTimer.Enabled = true;
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
}
private void chart1_Click(object sender, EventArgs e)
{
}
private void chart2_Click(object sender, EventArgs e)
{
}
private void chart4_Click(object sender, EventArgs e)
{
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... hout-a-whi
Как заставить код запускаться снова и снова после однократного нажатия кнопки без цикла while [закрыто] ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение