2016-12-28 14 views
0

私は、VBウィンドウ形式でIPにpingをかけるためのpingシステムを作ろうとしています。私が使用している現在のpingシステムでは、テキストボックスにテキストを入力するとアプリケーションがフリーズする傾向があります。私はこれを行うより良い方法があると確信しています。フリーズVBを使わずにIPにpingする方法は?

私が間違っていたアイデアはありますか?

タイマー:

Private Sub Timer4_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick 
    If Timer4.Enabled = True Then 
     Dim pingreq As Ping = New Ping() 
     Dim rep As PingReply = pingreq.Send(NsTextBox1.Text) 
     NsTextBox4.Text = NsTextBox4.Text + Environment.NewLine + ("Reply from " + NsTextBox1.Text + ":" + NsTextBox2.Text + "| time= " + rep.RoundtripTime.ToString() + "ms") 
     If rep.RoundtripTime = 0 Then 
      Timer4.Enabled = False 
     End If 
    End If 
End Sub 

ボタン:

Private Sub NsButton2_Click(sender As Object, e As EventArgs) Handles NsButton2.Click 

    Timer4.Enabled = True 

End Sub 

答えて

3

あなたはタイマーを取り除くと、ちょうどこのように、右のボタンハンドラからあなたのpingを実行したタスクを待っていますができます

Private Async Sub NsButton2_Click(sender As Object, e As EventArgs) Handles NsButton2.Click 
    Dim t = Task(Of PingReply).Run(
     Function() 
      Dim pingreq As Ping = New Ping() 
      Dim rep As PingReply = pingreq.Send(NsTextBox1.Text) 
      Return rep 
     End Function) 

    Dim result = Await t 

    NsTextBox4.Text = NsTextBox4.Text + Environment.NewLine + 
     ("Reply from " + NsTextBox1.Text + ":" + NsTextBox2.Text + 
     "| time= " + result.RoundtripTime.ToString() + "ms") 
End Sub 
+0

私はそのように考えたことはありませんでしたが、このコード内にエラーがあるようです。 –

+0

手入れをするのは簡単ですか?私はあなたの "エラー"が何であるかを推測することができます。それは私のために働く... –

+0

'Dim result = Await t'Awaitは非同期としてしか使用できない –

関連する問題