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