wpf - .NET 5.0 - 立即停止 WPF 应用程序中正在运行的线程
问题描述
我正在开发一个 WPF 应用程序,用于从远程客户端收集实时数据。数据采集由不同的线程管理(不同于用于运行主应用程序的线程)。当用户按下连接按钮时,数据采集线程被启动,同样地,当按下断开按钮时,线程应该停止。数据读取仅在用户决定时停止。我使用以下代码:
private void ConnectButton_Click(object sender, RoutedEventArgs e)
{
connectionThread = new Thread(new ThreadStart(myThreadStartFunc));
connectionThread.Start();
}
private void myThreadStartFunc()
{
TcpConnect();
ReadData();
}
private void TcpConnect()
{
mySocket = new Socket(...);
mySocket.Connect(ipEndPoint);
}
private void ReadData()
{
while(mySocket.Connected)
{
Thread.Sleep(300);
mySocket.Receive(data, ...);
}
}
private void DisconnectButton_Click(object sender, RoutedEventArgs e)
{
StopThread(connectionThread);
}
private void StopThread(Thread thread)
{
}
方法的主体应该是什么StopThread
?目前我正在使用thread.Interrupt()
StopThread 方法中的 try and catch 结构。它在数据读取方法的 while 循环中生成异常,在 line Thread.Sleep(300)
: System.Threading.ThreadInterrupted Exception: Thread was interrupted from a waiting state。
我想使用该thread.Abort()
方法,但它已过时(https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/5.0/thread-abort-obsolete)。有什么建议吗?先感谢您。
解决方案
推荐阅读
- php - Woocommerce如何在类别标题下显示相关标签
- tensorflow - 张量流预取
- javascript - 如何滚动到元素
- java - Spring Boot jsp 文件未找到错误 404 奇怪的前缀
- python - 这个python代码有什么问题?不能在用引号括起来的字符串后指定额外的字符
- python - 使用 pynn 进行简单的配对通信
- python - 为什么我的代码 if elif else 适用于所有人?
- javascript - Discord JS - 从 sqlite 检索信息并存储在数组中
- php - Laravel whereIn 不能正确使用 whereHas
- exasolution - 如何在 exasol 数据库中启用JsonFunctions=1?