簡體   English   中英

如何在C#中停止線程?

[英]How can I stop a thread in C#?

我已經創建了一個客戶端服務器應用程序,並且希望在服務器上有機會停止該服務器,然后再次啟動它。 問題是我無法停止偵聽Tcp Connections的線程。

如何在C#中關閉線程?

謝謝。

private void KeepServer(){
    while (this.connected)
    {
         tcpClient = tls.AcceptTcpClient();
         Connection newConnection = new Connection(tcpClient);
    }
}

通常,您應該通過指示您希望它們停止並讓他們這樣做來“停止”線程。 建議不要使用Thread.Abort除非在緊急情況下要關閉整個應用程序。 (在當前執行的線程上調用Thread.Abort較為安全,但通常還是比較麻煩的。順便說一下,這就是ASP.NET的工作。)

我有一個關於優雅地停止線程頁面 當然,您不必使用該確切的代碼-但設置標記並定期測試它的模式是重點。

現在,如何將其應用於您的特定情況將取決於您偵聽TCP連接的方式。 如果您可以發布該線程使用的代碼,我們也許可以對其進行適當調整。

您的問題有點籠統,但是,我認為這可以幫助您:

C#中的線程

我粘貼了一部分:

停止線程

通常,啟動線程后,它將一直運行到完成為止。 但是,可以通過調用Abort()方法來停止線程。 在我們的示例中,如果要停止firstThread,則應添加以下代碼。

在Suite101上了解更多信息:如何在C#中創建,停止和掛起線程。 Suite101.com http://www.suite101.com/article.cfm/c_sharp/96436#ixzz0ZsZRRjKx

編碼愉快!

您應該使用布爾值或條件來停止線程。 然后,您可以使用屬性來更改此布爾值的“標志”,並且線程的循環將結束。 這是正確的方法。 當然,您可以在線程上使用Abort(),但是不建議這樣做,它會引發您需要處理的異常。

可能是從Thread.Abort外部獲取的,有一種方法可以暫停。 但這是不正確的方式...

您應該只結束要殺死的代碼,到達最后一個}。 為了暫停,您應該使用Mutex。 操作的方式應該是,您命令該對象暫停,並且在完成當前請求后,該對象將在下一個對象之前被互斥體暫停。 或只是為了“殺死”而走出一步。

順便說一句,MSDN上有一篇不錯的文章介紹了常見的線程方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM