2014-11-14 72 views
0

因此,我有一個文本框,其中輸入了需要ping的PC的名稱。我跑平丟失焦點時:C#在焦點遺失和遺失值向文本框引發焦點丟失後,在背景上運行Ping

private void Name_LostFocus(object sender, System.EventArgs e) 
{ 
    if (PCIsOnline(textBox.Text)) 
    { 
      textBox.Background = Brushes.LightGreen; 
    } 
    else 
    { 
      textBox.Background = Brushes.LightSalmon; 
    } 
} 

PCIsOnline看起來是這樣的:

public static bool PCIsOnline(string arg) 
{ 
    Ping pingSender = new Ping(); 
    PingOptions options = new PingOptions(); 
    options.DontFragment = true; 
    string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
    byte[] buffer = Encoding.ASCII.GetBytes(data); 
    int timeout = 40; 
    try 
    { 
      PingReply reply = pingSender.Send(arg, timeout, 
              buffer, options); 
      if (reply.Status == IPStatus.Success) 
       return true; 
      else 
       return false; 
    } 
    catch 
    { 
      return false; 
    } 
} 

當電腦處於聯機狀態,一切都很好,我沒有得到任何凍結,但是當PC處於脫機狀態我的應用程序將會凍結一段時間。我知道,離線PC需要時間。但我的問題是這樣的:我如何在後臺啓動ping,何時結束這將改變啓動ping的文本框的背景顏色,具體取決於ping的結果。

我讀過一些關於這方面的話題,運行ping async,但這對我的情況沒有什麼幫助,至少我無法在我的代碼中實現它。

+0

檢出[BackgroundWorker](http://msdn.microsoft.com/en-us/library/cc221403(v = vs.95).aspx)。 – Vlad 2014-11-14 16:10:35

+0

我想我的腦凍結以及bw看起來像最簡單的方式來做我想做的,但我不明白我應該如何實現它。我的代碼示例將非常有幫助。謝謝你的任何方式:) – BolnoYGaD 2014-11-14 16:46:25

+0

好的,我能夠適應BW到我的代碼。我使用Amandeep Saini的例子answer =) – BolnoYGaD 2014-11-14 18:00:44

回答

0

您應該在單獨的線程中調用您的PCIsOnline(textBox.Text)函數。也許這可能有所幫助: how to call the method in thread with aruguments and return some value 祝你好運!

+0

它看起來應該做這項工作。但我想atm即時通訊不能undestand如何實現它到我的代碼;) – BolnoYGaD 2014-11-14 16:49:08

+0

使用您的鏈接的線程中的答案之一的BW例子。 – BolnoYGaD 2014-11-14 18:01:38