【发布时间】:2019-09-17 09:01:32
【问题描述】:
我创建了一个 Windows 窗体 应用程序来 ping 一个 IP 地址列表,然后我使用 Timer 每隔 30 秒重复 ping。这是我使用的代码:
private System.Timers.Timer timer;
public Form1()
{
InitializeComponent();
timer = new System.Timers.Timer();
timer.Interval = 30000;
timer.Enabled = true;
timer.Elapsed += button1_Click;
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
pingResults.Clear();
ipAddress.Add("10.100.1.1");
ipAddress.Add("10.100.1.2");
ipAddress.Add("10.100.1.3");
ipAddress.Add("10.100.1.4");
ipAddress.Add("10.100.1.5");
ipAddress.Add("10.100.1.100");
for (int i = 1; i < 7; i++)
{
pictureBoxList.Add((PictureBox)Controls.Find("pictureBox" + i, true)[0]);
}
Parallel.For(0, ipAddress.Count(), (i, loopState) =>
{
Ping ping = new Ping();
PingReply pingReply = ping.Send(ipAddress[i].ToString());
this.BeginInvoke((Action)delegate()
{
pictureBoxList[i].BackColor = (pingReply.Status == IPStatus.Success) ? Color.Green : Color.Red;
});
});
}
private void button1_Click(object sender,ElapsedEventArgs e )
{
backgroundWorker1.RunWorkerAsync();
}
但是我收到了这个错误信息:
错误 1 'button1_Click' 没有重载匹配委托 'System.EventHandler'
我尝试了很多示例,但我不知道如何使用Timer。这里有什么问题或者有没有其他方法可以重复 Ping?
【问题讨论】:
-
button1_Click 方法的参数与编译器期望的不匹配。应该是:void button1_Click(object sender, System.EventArgs e)
-
在那个
backgroundWorker1_DoWork,你不想Sleep。激活间隔已由计时器管理。