如何在窗口关闭按钮单击时杀死wpf应用程序中的所有线程

Sur*_*uri 2 c# wpf

我创建了一个WPF应用程序.我的应用程序中运行了两个线程:

  1. 第一个线程异步侦听PORT 40010上的TCP数据包并将数据推送到MSMQ
  2. 来自MSMQ的第二个线程弹出数据

当我通过单击窗口关闭按钮关闭应用程序时,它显示没有错误.但是,当我再次启动应用程序时,它会抛出异常:

Unable to start Listrner : Only one usage of each socket address 
    (protocol/network address/port) is normally permitted
Run Code Online (Sandbox Code Playgroud)

当我重新启动我的PC时,它第一次成功运行,但在关闭应用程序时,它不能再次运行

Raf*_*fal 6

你不应该杀死你的线程.

你应该做的是为他们提供一个很好的方式来完成.在应用程序结束时,您应该设置一些变量:

volatile bool shouldClose;
Run Code Online (Sandbox Code Playgroud)

在弹出下一个包并在那里制造无限循环之前,在你的线程中使用该变量.

至于主应用程序,它应该等待你的线程完成.

对于volatile关键字看到文档.