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

时间:2013-01-10 07:16:32

标签: c# wpf

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

  1. 第一个线程异步侦听PORT 40010上的TCP数据包并将数据推送到MSMQ
  2. 来自MSMQ的第二个线程弹出数据
  3. 当我通过单击窗口关闭按钮关闭应用程序时,它显示没有错误。 但是,当我再次启动应用程序时,它会抛出异常:

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

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

1 个答案:

答案 0 :(得分:6)

你不应该杀死你的线程。

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

volatile bool shouldClose;

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

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

for volatile关键字请参阅documentation