我是C#的新手,遇到问题。我有一个表单,它运行一个接收来自串口的输入的线程。但是,当窗口关闭时,线程继续运行。我试图覆盖virtual void OnClosing(object sender, CancelEventArgs e)
,但MessageBox保持弹出状态,这意味着线程仍在运行。我究竟做错了什么?哪个是最好的生命周期方法来覆盖窗口关闭前进行清理?Windows Form OnClosing停止线程
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();
}
}
}
“这似乎不起作用”......为什么不呢?怎么了?你在调试器中看到什么? – SLaks 2012-03-23 00:53:51
调试器中没有任何内容。 MessageBoxes保持弹出状态,这意味着线程仍在运行 – 2012-03-23 00:54:36
它可能是积压的消息吗?如果你删除MessageBox并观看控制台呢? – 2012-03-23 01:03:43