我有与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();
}
}
}
答案 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?