[英]How can I send arguments(string) to the UI thread with the Background Worker?
[英]Code lags UI but I am unclear how to use Background worker on a task that requires inputs
我要在网络上(员工电话)ping大约10-15 ips来摆放显示器,如果他们在办公室我们不在办公室
我有一个计时器,它具有一个5000ms的滴答声,可在所有IP上执行ping操作
我尝试做后台工作人员或脚踏车,但问题是他们似乎要么1)不想采用已通过的参数,要么2)无法访问更新表单控件
private void Check()
{
foreach (StatusBox sb in flowLayoutPanel1.Controls)
{
Ping pingSender = new Ping();
PingReply reply = pingSender.Send(sb.IPaddress, 10);
if (reply.Status == IPStatus.Success) //device found update last seen
{
sb.Color = Color.Green;
sb.lastseen = DateTime.Now.ToLongTimeString();
sb.lastseenDate = DateTime.Now;
}
else
{
if (sb.lastseenDate != Convert.ToDateTime("1/1/0001 12:00:00 AM")) //no date means device has not been found yet
{
if (sb.lastseenDate.AddMinutes(10) < DateTime.Now)
{
sb.Color = Color.Yellow;
}
else if (sb.lastseenDate.AddHours(1) < DateTime.Now)
{
sb.Color = Color.LightGray;
}
}
}
}
访问表单上的控件不是线程安全的,要更改控件的属性,您需要从运行窗口表单的线程访问该控件。例如,此处有一个用于更改状态框颜色的函数
private void SetColor(StatusBox sb, Color col)
{
if (sb.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetColor);
this.Invoke(d, new object[] { col});
}
else
{
sb.Color = col;
}
}
您可以在此页面上找到更多示例和解释: https : //msdn.microsoft.com/zh-cn/library/ms171728(v= vs.110).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.