我有一個while循環,當我按下按鈕時開始。我正在使用它來維護與另一臺計算機上的服務的通信。問題是,當我從另一臺計算機收到「Completed」消息時,我需要它跳出while循環並停止收聽,直到再次按下按鈕。我所做的沒有任何事情似乎將它從循環中分離出來。我如何擺脫這個特殊的while循環?
請注意整個過程在其自己的線程中執行。
我試過把打破;就在交換機的第一個案例結束之前,沒有這樣的運氣,我不確定是否因爲它是一個switch語句,預計會休息;案件之間或原因是什麼。我也試過把歸還;在那裏,但它仍然不會爆發。我最終不得不關閉應用程序並重新啓動它以再次使用該按鈕。
TcpClient client = new TcpClient(serverIP, 11000);
NetworkStream stream = client.GetStream();
Byte[] bytes = new Byte[256];
String data = null;
int i;
stream.Write(copy, 0, copy.Length);
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
//MessageBox.Show(data);
switch (data)
{
case "Completed":
this.Invoke((MethodInvoker)delegate
{
progressBar1.Value = 0;
progressBar1.Visible = false;
progressBar1.Update();
if (prod)
{
sqlLink.setProdFile(imageName, destFileName);
} else
{
sqlLink.setTestFile(imageName, destFileName);
if (sqlLink.getTestVM(imageName) != "")
{
if (message.Text("Test VM", "Power on specified Virtual Machine in private mode?", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
PS ps = new PS();
ps.powerOnVM(sqlLink.getTestVM(imageName));
}
}
}
//Tried putting break; here.
});
break;
case "FIU":
{
progressBar1.Value = 0;
progressBar1.Visible = false;
progressBar1.Update();
message.Text("Error", "The image is in use. Try shutting down machines or unassigning devices.", MessageBoxButtons.OK);
}
break;
case "DSF":
{
progressBar1.Value = 0;
progressBar1.Visible = false;
progressBar1.Update();
message.Text("Error", "Drive space is full on production volume. Try deleting some older images.", MessageBoxButtons.OK);
}
break;
default:
this.Invoke((MethodInvoker)delegate
{
progressBar1.Value = Int16.Parse(data);
progressBar1.Update();
});
break;
}
}
stream.Close(); //This never happens.
client.Close();
}
catch (Exception ex)
{
message.Text("Error", "Copy Method Error: " + ex.Message, MessageBoxButtons.OK);
}
每個'case'在開關必須具有'打破;'在末端。在案件發生後你需要跳出while循環。 – pay
問題在於如果案件「已完成」,我只想分手。 –
可能只是做好友說的話,設置一個'bool'並做'if(someBool){break; }'作爲'while'語句後的第一行 – pay