我为我的大学学位创建了一个远程管理工具。我目前确实停留在我的代码中的一个错误,并且想知道是否有人可以阐明我的问题。我有应用程序,服务器和客户端。服务器运行正常。但是,客户端是冻结的应用程序。在连接到服务器之前,客户端可以正常工作。连接到服务器后,客户端将不断冻结在屏幕上。我已将错误缩小到特定的代码段,而没有运行该代码的应用程序就不会冻结。但是,该应用程序也不起作用。这是该代码的示例:private static void ReceiveResponse() { var buffer = new byte[2048]; //The receive buffer try { int received = 0; if (!IsLinuxServer) received = _clientSocket.Receive(buffer, SocketFlags.None); //Receive data from the server else received = _sslClient.Read(buffer, 0, 2048); if (received == 0) return; //If failed to received data return var data = new byte[received]; //Create a new buffer with the exact data size Array.Copy(buffer, data, received); //Copy from the receive to the exact size buffer if (isFileDownload) //File download is in progress { Buffer.BlockCopy(data, 0, recvFile, writeSize, data.Length); //Copy the file data to memory writeSize += data.Length; //Increment the received file size if (writeSize == fup_size) //prev. recvFile.Length == fup_size { using (FileStream fs = File.Create(fup_location)) { Byte[] info = recvFile; // Add some information to the file. fs.Write(info, 0, info.Length); } Array.Clear(recvFile, 0, recvFile.Length); SendCommand("frecv"); writeSize = 0; isFileDownload = false; return; } }此代码是用户从服务器接收请求的方式。因此,它是每100毫秒运行一次的计时器。我想知道计时器是否与此有关。在进入While(true)循环之前,我遇到了相同的问题,这使我认为这是导致UI冻结的实际代码。即使应用程序被冻结,该代码仍然可以正常工作,除了UI之外,该应用程序中的所有内容都可以正常工作。这确实令人沮丧,并且我看不到任何导致应用程序冻结的代码有任何错误。
3 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
因此为此解决了一些问题,没有使用异步,但是我最终为此任务创建了一个不同的线程。
新线程让我使用了while(true)循环来永远循环接收响应。
private void btnConnect_Click(object sender, EventArgs e)
{
ConnectToServer();
Thread timerThread = new Thread(StartTimer);
timerThread.Start();
//StartTimer();
//timerResponse.Enabled = true;
}
private static void StartTimer()
{
while (true)
{
ReceiveResponse();
}
}
这足以满足我的需要。
- 3 回答
- 0 关注
- 137 浏览
添加回答
举报
0/150
提交
取消