Как заставить код выполняться снова и снова после однократного нажатия кнопки без цикла while (C#) [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить код выполняться снова и снова после однократного нажатия кнопки без цикла while (C#) [закрыто]

Сообщение Anonymous »

Я новичок в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»