我的客户端应用程序中有一个BackgroundWorker_DoWork
方法,它使用 NetworkComms.Net 将 tcp 消息发送到服务器并检查答案。
最后一部分的方法是
NetworkComms.AppendGlobalIncomingPacketHandler
我可以验证答案是否具有某种类型,如果是,则调用另一种方法来处理答案消息本身。
我想要做的是从处理程序中停止 BackgroundWorker,但我不知道如何。非常感谢任何帮助,因为我对面向对象编程非常陌生,而且我可能缺少一些基本的东西。
这是相关的代码:
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
if (backgroundWorker2.CancellationPending)
{
e.Cancel = true;
return;
}
string serverIP = entr_serverIP.Text;
int serverPORT;
int.TryParse(entr_serverPORT.Text, out serverPORT);
bool loop = true;
while (loop == true)
{
if (backgroundWorker2.CancellationPending)
{
e.Cancel = true;
return;
}
try
{
NetworkComms.SendObject("Message", serverIP, serverPORT, "status");
NetworkComms.AppendGlobalIncomingPacketHandler<string>("ReturnHere", DoSomething2);
}
catch(DPSBase.CommsException ex2)
{
MessageBox.Show(ex2.ToString());
e.Cancel = true;
return;
}
Thread.Sleep(100);
}
}
private static void DoSomething2(PacketHeader header, Connection connection, string message)
{
bool svAlarmSent = false;
while (svAlarmSent == false)
{
if (message == "KEYWORD")
{
string svInfo = connection.ConnectionInfo.RemoteEndPoint.ToString();
Form4 form4 = new Form4("KEYWORD", null, svInfo);
form4.Show();
svAlarmSent = true;
backgroundWorker2.CancelAsync();
loop = false;
}
}
}
上述代码的最后两行不起作用,因为该上下文中不存在CancelAsync
方法和变量。loop