У меня 2 кнопки. Кнопка Connect (открыть com-порт) и Disconnect (закрыть порт). Когда я нажимаю на кнопку подключения, таймер будет запускать и отображать данные в Listbox через com-порт каждые несколько секунд. Когда я нажимаю «Отключить» и снова нажимаю кнопку «Подключить», данные не будут отображаться в списке и таймер не сработает Почему это так?
Вот мои коды:
List<byte> buffer = new List<byte>(125);
private void btnConnect_Click(object sender, EventArgs e)
{
if (serialPortN.IsOpen)
serialPortN.Close();
try
{
{
serialPortN.PortName = "COM8";
serialPortN.BaudRate = 9600;
serialPortN.Parity = Parity.None;
serialPortN.DataBits = 8;
serialPortN.StopBits = StopBits.One;
serialPortN.Encoding = System.Text.Encoding.ASCII;
serialPortN.ReadTimeout = 500;
}
serialPortN.Open();
label1.Text = "COM8" + " is opened";
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 5000;
timer.Elapsed += new ElapsedEventHandler(TimerElapsed);
timer.Start();
serialPortN.DataReceived += new SerialDataReceivedEventHandler(datareceived);
btnDisconnect.Enabled = true;
btnConnect.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
void datareceived(object sender, SerialDataReceivedEventArgs e)
{
myDelegate d = new myDelegate(update);
listBox1.Invoke(d, new object[] { });
}
public void update()
{
while (serialPortN.BytesToRead > 0)
buffer.Add((byte)serialPortN.ReadByte());
// Call a routine to process the data.
ProcessBuffer(buffer);
}
private void ProcessBuffer(List<byte> buffer)
{
int numberOfBytesToRead = 125;
if (buffer.Count >= numberOfBytesToRead)
{
this.Invoke(new Action(() =>
Console.WriteLine(string.Format("SPO = {0}, PulseRate = {1}, Time = {2}",
buffer[43].ToString(),
buffer[103].ToString(),
DateTime.Now.ToString()
))));
buffer.RemoveRange(0, numberOfBytesToRead);
}
}
void TimerElapsed(object sender, ElapsedEventArgs e)
{
int numberOfBytesToRead = 125;
if (buffer.Count >= numberOfBytesToRead)
{
this.Invoke(new Action(() =>
listBox1.Items.Add(string.Format("SPO = {0}, PulseRate = {1}, Time = {2}",
buffer[43].ToString(),
buffer[103].ToString(),
DateTime.Now.ToString()
))));
buffer.RemoveRange(0, numberOfBytesToRead);
}
Спасибо всем!