结束等待点击的线程

时间:2012-03-28 10:25:23

标签: c# .net multithreading

我有与while(true)的线程,它维护我与客户端的连接。在里面,我有bool。当我点击按钮时,它设置为“true”并开始文件传输(所有指令都在if中)。

我的问题是,如何在没有时间的情况下保持线程中的连接,或者当我的客户端断开连接时我应该如何“发送”。

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();
                    }
                }

            }

2 个答案:

答案 0 :(得分:0)

使用ManualResetEvent同步线程。在后台线程中使用Wait and in按钮单击answer使用Set()方法

答案 1 :(得分:0)

使用不是一个好主意,因为CPU循环浪费了旋转循环。

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

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

有关WaitHandle的使用示例,请参阅以下链接: What is the basic concept behind WaitHandle?