正在结束等待单击的线程
本文关键字:线程 单击 等待 结束 | 更新日期: 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背后的基本概念是什么?