我實現了作爲TcpCLient服務器的類。看起來像這樣:如何通過MEF導出類時正確退出後臺線程?
{
[Export]
public class MessageListener
{
private readonly TcpListener tcpListener;
private readonly Thread listenThread;
private DataRepository DataRepository { get; set; }
private IEventAggregator EventAggregator { get; set; }
[ImportingConstructor]
public MessageListener(DataRepository dataRepository, IEventAggregator eventAggregator)
{
this.DataRepository = dataRepository;
this.EventAggregator = eventAggregator;
// TODO: Need to put proper Port number
this.tcpListener = new TcpListener(IPAddress.Any, 3000);
this.listenThread = new Thread(this.ListenForClients);
this.listenThread.Start();
}
private void ListenForClients()
{
this.tcpListener.Start();
while (true)
{
// blocks until a client has connected to the server
var client = this.tcpListener.AcceptTcpClient();
// create a thread to handle communication with connected client
var clientThread = new Thread(this.HandleClientComm);
clientThread.Start(client);
}
}
這個監聽器在我的Shell視圖模型中導入。效果很好。
當我關閉WPF窗口 - MEF不會處理這個對象。 Windows關閉,但進程仍在運行。我如何正確關閉這個「服務器」?它等待var client
..
它不循環,我不能使用標誌 - 它在特定的代碼行上等待客戶端 – katit
儘管如此,它永遠不會熄滅,但如果您想要這樣,這並不是什麼大問題...... – Maresh