2016-09-03 5 views
0

Я пинговаю около 10-15 ips в своей сети (телефоны сотрудников), чтобы выставить дисплей, если они находятся в офисе, из нашего офисКод lags UI, но я не понимаю, как использовать фоновый рабочий для задачи, требующей ввода

у меня есть таймер, который имеет 5000 мс клеща, который пинает из пинга на все IP-адреса

Я пытался сделать фон рабочим или протектор, но проблема в том, что они, кажется, либо 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; 
        } 
       }     
      }  
     } 

ответ

1

Доступ к элементам управления в форме не является потокобезопасным, чтобы изменить свойства элемента управления, которому необходимо получить доступ к элементу управления из потока, в котором работает оконная форма ... Например, здесь функция изменения цвета вашего окна состояния

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; 
} 
} 

Вы можете найти больше примеров и explainations на этой странице: https://msdn.microsoft.com/en-us/library/ms171728(v=vs.110).aspx

+0

бы я называю это с внутренней стороны BackgroundWorker или нить? – Crash893

+1

вы вызываете функцию из любого места, где бы вы ни захотели, так как у вас есть ссылка на ваш контроль winform ... Но функция будет в вашей winform :) Если вы используете фонового работника, есть пример в ссылке о том, как сделай это –

 Смежные вопросы

  • Нет связанных вопросов^_^