簡體   English   中英

等待點擊的結束線程

[英]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.

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