Я новичок в C #, и у меня возникла проблема.У меня есть форма, которая запускает поток, который получает вход от последовательного порта.Однако, когда окно закрыто, поток продолжает работать.Я попытался переопределить virtual void OnClosing(object sender, CancelEventArgs e)
, но MessageBox продолжает появляться, что означает, что поток все еще работает.Что я делаю неправильно?Какой метод жизненного цикла лучше всего переопределить для очистки перед закрытием окна?
DisplayForm.cs
using System;
using System.ComponentModel;
using System.Drawing;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;
namespace project
{
public partial class DisplayForm : Form
{
private Thread readThread;
private SerialPort port;
private bool running;
public DisplayForm(String portName)
{
InitializeComponent();
port = new SerialPort(portName);
port.Open();
readThread = new Thread(Read);
running = true;
readThread.Start();
}
public void Read()
{
while (running)
{
try
{
string message = port.ReadLine();
Console.Write(message);
MessageBox.Show(message);
}
catch (TimeoutException)
{
}
}
}
protected virtual void OnClosing(object sender, CancelEventArgs e)
{
running = false;
readThread.Join();
port.Close();
}
}
}