2017-11-29 20 views
-2

그래서이 프로그램을 네트워크의 특정 서버에 연결해야하지만이 경우에는 8.8.8.8을 사용합니다. 연결 상태를 쉽게 알 수 있도록 연결되어 있으면 "예"라고 표시하고 그렇지 않으면 "아니요"라고 표시해야하는 레이블이 있습니다. 그러나 나는 그것을 사용할 수 없습니다, 이것은 사용하고있는 코드입니다 :성공적인 핑을 기반으로 레이블 텍스트를 변경하는 방법은 무엇입니까?

죄송합니다. 그것은 아무 것도하지 않는 것처럼 보입니다 ... 레이블이 전혀 바뀌지 않는 것처럼 말입니다. 나는 Visual Studio 2017과 2015에서 2 개의 다른 컴퓨터에서 그것을 시도했다. 나는 그 주위에 머리를 감쌀 수 없다.

private void Form2_Load(object sender, EventArgs e) 
{ 
    timer1.Interval = 4000; 
    timer1.Enabled = true; 
    timer1.Tick += new EventHandler(timer1_Tick); 
    timer1.Start(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    Ping ping = new Ping(); 
    PingReply pingStatus = ping.Send(IPAddress.Parse("8.8.8.8")); 

    if (pingStatus.Status == IPStatus.Success) 
    { 
     label6.Text = "yes"; 
     label6.ForeColor = Color.Blue; 
    } 

    else 
    { 
     label6.Text = "no"; 
     label6.ForeColor = Color.Red; 
    } 
} 

편집 : 변경 =

+1

"그러나 작동시키지 못합니다."는 문제에 대한 설명이 아닙니다. 디버깅 해 봤어? – john

+0

[잘 작동합니다] (https://imgur.com/a/2HhwB). Form2_Load (...)가 연결되어 호출되고 있습니까? – john

+0

죄송합니다. 실제로 설명이 충분하지 않았습니다. 그것은 아무 것도하지 않는 것처럼 보입니다 ... 레이블이 전혀 바뀌지 않는 것처럼 말입니다. 나는 Visual Studio 2017과 2015에서 2 개의 다른 컴퓨터에서 그것을 시도했다. 나는 그 주위에 머리를 감쌀 수 없다. –

답변

-1

당신은 다음과 같은 것을 시도 할 것이다 ==하기;!

private void Form2_Load(object sender, EventArgs e) 
    { 

     timer1.Interval = 4000; 
     timer1.Enabled = true; 
     timer1.Tick += new EventHandler(timer1_Tick); 
     timer1.Start(); 
    } 
    private void timer1_Tick(object sender, EventArgs e) 
    { 
     string Address = "8.8.8.8"; 
     PingHost(Address); 
    } 
    public bool PingHost(string Address) 
    { 
     bool Canping = false; 
     Ping ping = new Ping(); 
     try 
     { 
      PingReply reply = ping.Send(Address);    
      label6.Text = reply.Status.ToString(); 
      label6.ForeColor = Color.Blue; 
     } 
     catch (PingException e) 
     { 
      label6.Text = e.ToString(); 
      label6.ForeColor = Color.Red; 
     } 
     return Canping; 
    } 

당신이 반환 조금 더 잘 처리 할 수 ​​NetworkInformation를 사용하여이 방법.

그러나이 검사를 4 초마다 수행하는 것이 성능에 영향을 미칠 수 있으므로 최선의 방법은 아닐 수 있습니다. 그러나 이것은 모든 응용 프로그램이 필요하고 핑하는 네트워크에 달려 있다고 생각합니다.

편집

영업 코드는 작동하지만이 처리하는이 어쩌면 더 효율적인 방법을 수행합니다.

+0

"대답이 아닙니다."플래그가 붙어 있습니다. 핑 코드를 timer1_Tick의 메소드로 옮기면됩니다. 그것은 OP의 문제를 전혀 해결하지 못합니다. – john

+0

내 플래그를 검토하는 사람들에게 : OP는 이미 폼의로드 이벤트에 Form2_Load 메서드를 연결하지 않았으며 OP 코드가 정상적으로 작동한다는 것을 주석에서 확인했습니다. Tom의 대답은 코드 검토이며 대답이 아니라 대체 솔루션이 아니기 때문에 메서드에서 ping 기능을 캡슐화했습니다. – john

+0

이 질문에 대한 답을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. - [리뷰에서] (리뷰/저품절 게시물/18106034) – wp78de