首页 > 解决方案 > .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)。有什么建议吗?先感谢您。

标签: wpfmultithreading.net-5c#-9.0

解决方案


推荐阅读