2014-11-14 8 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가 오프라인 일 때 내 응용 프로그램이 정지합니다 언젠가는. 그것은 정상적인 나는 알고, 오프라인 PC를 핑 핑 시간이 걸립니다. 하지만 내 질문은 : 백그라운드에서 ping을 시작할 수있는 방법과 끝날 때 ping 결과에 따라 ping을 시작한 텍스트 상자의 배경색이 변경됩니다.

나는이 문제에 관해서 ping async를 실행했지만 내 경우에는 도움이되지 않았다. 적어도 내 코드에서는 구현할 수 없었다.

+0

[BackgroundWorker] (http://msdn.microsoft.com/en-us/library/cc221403(v=59) .aspx)를 확인하십시오. – Vlad

+0

내 뇌가 얼어 붙은 것 같아. bw는 내가 원하는 것을하기위한 가장 단순한 방법처럼 보이지만 어떻게 구현해야하는지 이해하지 못한다. 내 코드 예제는 정말 도움이 될 것입니다. 어떤 방법으로 고마워요 :) – BolnoYGaD

+0

오케이 내가 내 코드에 BW를 맞출 수있었습니다. Tho 나는 Amandeep Saini 대답 =)에서 예를 사용했습니다. – BolnoYGaD

답변

0

별도의 스레드에서 PCIsOnline (textBox.Text) 함수를 호출해야합니다. 아마도 도움이 될 수도 있습니다. how to call the method in thread with aruguments and return some value 행운을 빈다.

+0

작업을 수행해야하는 것처럼 보입니다. 하지만 난 atm 메신저 내 코드에 그것을 구현하는 방법을 undestand 수없는 것 같아요) – BolnoYGaD

+0

BW 예를 사용하여 연결된 스레드에서 답변 중 하나에서. – BolnoYGaD

관련 문제