正在结束等待单击的线程

本文关键字:线程 单击 等待 结束 | 更新日期: 2023-09-27 18:29:10

我有一个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();
                    }
                }
            }

正在结束等待单击的线程

使用手动重置事件同步线程。在后台线程中使用Wait,在按钮中单击answer使用Set()方法

在时使用不是一个好主意,因为CPU周期浪费在循环中。

如果SayHi()方法不在一个单独的线程中,则可以安全地删除while循环,并直接从按钮单击事件内部调用SayHi()方法。

如果SayHi()方法在一个单独的线程中,则可以使用ManualResetEvent或AutoResetEvent,并使用WaitHandle在while循环中等待。这样可以确保在线程不执行任何任务时不会浪费CPU周期。

有关WaitHandle的示例用法,请参阅以下链接:WaitHandle背后的基本概念是什么?