私はC#を初めて使用していますが、問題が発生しています。シリアルポートから入力を受け取るスレッドを実行するフォームがあります。しかし、ウィンドウが閉じられると、スレッドは実行を継続します。私はvirtual void OnClosing(object sender, CancelEventArgs e)
をオーバーライドしようとしましたが、MessageBoxはポップアップを維持しています。つまり、スレッドはまだ実行中です。私は間違って何をしていますか?ウィンドウが閉じられる前にクリーンアップを行うためにオーバーライドするのに最適なライフサイクルメソッドはどれですか?あなたが既に持っている、その後WindowsフォームOnClosingスレッドを停止する
あなたのコードの最初の呼び出しのport.closeで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
デバッガには何もありません。 MessageBoxesはポップアップを維持します。つまり、スレッドがまだ実行中であることを意味します。 –
メッセージのバックログですか?代わりにMessageBoxを削除してコンソールを見るとどうなりますか? –