C# Windows窗体正在停止线程
我是新来C#的,我遇到了一个问题。我有一个窗体,它运行一个线程,该线程从串行端口接收输入。但是,当窗口关闭时,线程将继续运行。我试图覆盖C# Windows窗体正在停止线程,c#,.net,winforms,C#,.net,Winforms,我是新来C#的,我遇到了一个问题。我有一个窗体,它运行一个线程,该线程从串行端口接收输入。但是,当窗口关闭时,线程将继续运行。我试图覆盖虚拟void OnClosing(objectsender,CancelEventArgs e),但消息框一直弹出,这意味着线程仍在运行。我做错了什么?在关闭窗口之前,覆盖以执行清理的最佳生命周期方法是什么 DisplayForm.cs using System; using System.ComponentModel; using System.Drawing
虚拟void OnClosing(objectsender,CancelEventArgs e)
,但消息框一直弹出,这意味着线程仍在运行。我做错了什么?在关闭窗口之前,覆盖以执行清理的最佳生命周期方法是什么
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();
}
}
}
OnClosing或OnClosed事件调用尝试查看任何正在运行的子线程并将其全部中止…在代码的第一个调用端口中。关闭然后运行您在Oncl中已经有权访问的线程。您需要使用
abort()
而不是Join()
“那似乎不管用”。。。为什么不呢?会发生什么?你在调试器中看到了什么?调试器中什么都没有。消息框不断弹出,这意味着线程仍在运行可能是积压的消息?如果您移除MessageBox并观看控制台,会怎么样?控制台消息也会不断发生
protected virtual void OnClosing(object sender, CancelEventArgs e)
{
running = false;
readThread.Abort();
port.Close();
}