[英]Ending Thread which wait for click
我的while(true)線程與我保持與客戶端的連接。 里面我有如果布爾。 當我單擊按鈕時,將其設置為“ true”並開始文件傳輸(所有指令均在if中)。
我的問題是,如何在不使用while的情況下保持線程連接,或者當客戶端斷開連接時應該如何在while期間退出。
public void SayHi()
{
try
{
while (true)//for maintain connection
{
if(form1.transfer)
{
NetworkStream networkStream = clientSocket.GetStream();
CardNumber++;
form1.SendQuestion(clientSocket, CardNumber, Convert.ToInt32(clNo));
form1.transfer = false;
Thread AnswerThread = new Thread(WaitForAnswer);
AnswerThread.IsBackground = true;
AnswerThread.Start();
}
}
}
使用while不是一個好主意,因為CPU周期浪費了旋轉循環。
如果SayHi()方法不在單獨的線程中,則可以安全地刪除while循環,然后從按鈕click事件內部直接調用SayHi()方法。
如果SayHi()方法在單獨的線程中,則可以使用ManualResetEvent或AutoResetEvent並使用WaitHandle在while循環內等待。 這樣可以確保在線程不執行任何任務時不會浪費CPU周期。
有關使用WaitHandle的示例用法,請參見以下鏈接:WaitHandle 的基本概念是什么?
使用ManualResetEvent同步線程。 在背景線程中,使用“等待”,然后在按鈕中單擊答案,使用Set()方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.