簡體   English   中英

代碼滯后於UI,但我不清楚如何在需要輸入的任務上使用后台工作程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM