2014-02-18 79 views
-1

如何接收命令的輸出。如何接收命令的輸出

這是我的形式:

My Form

這是我的代碼:

Imports System.Net 

Public Class Form1 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load, btnRefresh.Click 
     PortList.Items.Clear() 
     For Each a As String In My.Computer.Ports.SerialPortNames 
      'collecting available port 
      PortList.Items.Add(a) 
     Next 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnConnect.Click 
     If btnConnect.Text = "CONNECT" Then 'opeing port 
      If SerialPort1.IsOpen Then 
       SerialPort1.Close() 
      End If 
      Try 
       With SerialPort1 
        .PortName = PortList.Text 
        .BaudRate = 115200 
        .ReadBufferSize = 500 
        .Parity = IO.Ports.Parity.None 
        .DataBits = 8 
        .StopBits = IO.Ports.StopBits.One 
        .Handshake = IO.Ports.Handshake.None 
       End With 
       SerialPort1.Open() 
       btnConnect.Text = "DISCONNECT" 
       PortList.Enabled = False 
       With lblStatus 
        .Text = "Connected" 
        .ForeColor = Color.Green 
       End With 
      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
     Else 'closing port 
      Try 
       SerialPort1.Close() 
       btnConnect.Text = "CONNECT" 
       PortList.Enabled = True 
       With lblStatus 
        .Text = "Not Connected" 
        .ForeColor = Color.Red 
       End With 
      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
     End If 
    End Sub 

    Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed 
     Try 
      SerialPort1.Close() 'closing serial port 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
    End Sub 

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles btnSend.Click 
     If UssdInput.Text.Length < 1 Then Exit Sub 
     Try 
      SerialPort1.WriteLine("AT+CUSD=1," & Chr(34) & UssdInput.Text & Chr(34) & ",15" & vbCrLf) 'send at command 
      UssdOutput.Text = SerialPort1.ReadExisting.ToString 
     Catch ex As Exception 
      MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, 
      MessageBoxIcon.Error) 
     End Try 
     With UssdInput 
      .SelectAll() 
      .Focus() 
     End With 
    End Sub 

    Private Sub Button2_Click(sender As Object, e As EventArgs) 
     MsgBox(System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList(1).ToString()) 
    End Sub 

    Private Sub UssdInput_KeyPress(sender As Object, e As KeyPressEventArgs) Handles UssdInput.KeyPress 
     If e.KeyChar = vbCr Then 
      btnSend.PerformClick() 
     End If 
    End Sub 
End Class 
+1

你到目前爲止嘗試過什麼?你有沒有讀過SerialPorts類的文檔和它公開的事件? –

回答

1

你要聽串行端口的DataReceived事件。這裏是一個例子:

Private Sub SerialPort1_DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 
    Invoke(Sub() UssdOutput.Text &= SerialPort1.ReadExisting()) 
End Sub 
+0

對不起@Steven 其無法正常工作 ![在這裏輸入的形象描述] [1] 這個>> http://prntscr.com/2tlsu0 請幫我:) – joni

+0

哎呀。我忘記了這個事件是從另一個線程引發的。我更新了我的答案。 –

+0

其工作。但文字不正確 – joni