2

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

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

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

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

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

4

1 回答 1

6

你不应该杀死你的线程。

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

volatile bool shouldClose;

并在您的线程中使用该变量,然后再弹出下一个包并在那里制动您的无限循环。

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

对于 volatile 关键字,请参阅文档

于 2013-01-10T07:25:54.293 回答