【发布时间】:2014-09-05 18:01:16
【问题描述】:
我编写了这个程序来自动收集允许我连接到端口 8888 的 IP 地址。
在最后一个循环之前它工作正常。我的for 循环由此完成。但是我的计时器一直在输出:
10.10.10.150 - No
10.10.10.150 - No
10.10.10.150 - No
10.10.10.150 - No
这是我的代码,在 for 循环之后我尝试停止计时器,但它并没有停止。
protected void PingPython(){
for (int i = 50; i <= 150; i++){
// Try Connect to Python
try{
ip = "10.10.10."+i.ToString();
// Set timer to break Client connection
tConnectTimeout = new System.Timers.Timer(100);
tConnectTimeout.Elapsed += new System.Timers.ElapsedEventHandler(tConnectTimeout_Elapsed);
tConnectTimeout.Start();
// Connect to Client
cli = new TcpClient();
cli.Connect(ip, 8888);
// If it connects, stop the thread
tConnectTimeout.Stop();
tConnectTimeout.Dispose();
Console.WriteLine(ip + " - Yes");
ipAddresses.Add(ip);
cli.Close();
} catch (ObjectDisposedException ex) {
} catch (SocketException ex) {
tConnectTimeout.Stop();
tConnectTimeout.Dispose();
Console.WriteLine(ip + " - No");
}
}
tConnectTimeout.Stop();
btnStart.Sensitive = true;
foreach(string ipa in ipAddresses){
cbAddresses.AppendText(ipa);
}
cbAddresses.Sensitive = true;
}
public void tConnectTimeout_Elapsed(object sender, System.Timers.ElapsedEventArgs e){
//Close the socket
cli.Close();
Console.WriteLine(ip + " - No");
//Stop and dispose timer
tConnectTimeout.Stop();
tConnectTimeout.Dispose();
}
【问题讨论】:
-
请添加一个显示问题答案的答案,而不是重新编辑问题。谢谢
-
您真的只是想实现连接超时吗? stackoverflow.com/a/17118710/56778 以获得更清洁的方式。
标签: c# multithreading timer mono gtk#