2016-01-17 1 views
0

Моя программа зависает при отправке messsage. Мой код не показывает ошибки, и когда я тестирую свой экран gsm в гипертерминале, я могу отправить сообщение и получить его через свой телефон, используя AT-команды. Но в моей программе он просто зависает.Моя программа Замораживает при отправке сообщения с помощью gsm shield VB.net

Imports System 
Imports System.Threading 
Imports System.ComponentModel 
Imports System.IO.Ports 

Public Class Form1 
'connect your mobile/GSM modem to PC, 
'then go in device manager and check under ports which COM port has been slected 
'if say com1 is there then put com2 in following statement 
Dim SMSEngine As New SMSCOMMS("COM4") 
Dim i As Integer 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    SMSEngine.Open() 'open the port 
    SMSEngine.SendSMS() 'send the SMS 

End Sub 
End Class 
Public Class SMSCOMMS 
Private WithEvents SMSPort As SerialPort 
Private SMSThread As Thread 
Private ReadThread As Thread 
Shared _Continue As Boolean = False 
Shared _ContSMS As Boolean = False 
Private _Wait As Boolean = False 
Shared _ReadPort As Boolean = False 
Public Event Sending(ByVal Done As Boolean) 
Public Event DataReceived(ByVal Message As String) 

Public Sub New(ByRef COMMPORT As String) 
    'initialize all values 
    SMSPort = New SerialPort 
    With SMSPort 
     .PortName = COMMPORT 
     .BaudRate = 9600 
     .Parity = Parity.None 
     .DataBits = 8 
     .StopBits = StopBits.One 
     .Handshake = Handshake.RequestToSend 
     .DtrEnable = True 
     .RtsEnable = True 
     .NewLine = vbCrLf 
    End With 
End Sub 
Public Function SendSMS() As Boolean 
    If SMSPort.IsOpen = True Then 
     'sending AT commands 
     SMSPort.WriteLine("AT") 
     SMSPort.WriteLine("AT+CMGF=1" & vbCrLf) 'set command message format to text mode(1) 
     SMSPort.WriteLine("AT+CSCA="" +639170000130""" & vbCrLf) 'set service center address (which varies for service providers (idea, airtel)) 
     SMSPort.WriteLine("AT+CMGS= + TextBox1.text + " & vbCrLf) ' enter the mobile number whom you want to send the SMS 
     _ContSMS = False 
     SMSPort.WriteLine("+ TextBox1.text +" & vbCrLf & Chr(26)) 'SMS sending 
     MessageBox.Show(":send") 
     SMSPort.Close() 
    End If 
End Function 

Public Sub Open() 
    If Not SMSPort.IsOpen Then 
     SMSPort.Open() 
    End If 
End Sub 

Public Sub Close() 
    If SMSPort.IsOpen Then 
     SMSPort.Close() 
    End If 
End Sub 
End Class 

ответ

0
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    SMSEngine.Open() 'open the port  
    If Not BackgroundWorker1.IsBusy Then 
     BackgroundWorker1.RunWorkerAsync() 
    End If 
End Sub 

Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 
    If SMSPort.IsOpen = True Then 
     'sending AT commands 
     SMSPort.WriteLine("AT") 
     SMSPort.WriteLine("AT+CMGF=1" & vbCrLf) 'set command message format to text mode(1) 
     SMSPort.WriteLine("AT+CSCA="" +639170000130""" & vbCrLf) 'set service center address (which varies for service providers (idea, airtel)) 
     SMSPort.WriteLine("AT+CMGS= + TextBox1.text + " & vbCrLf) ' enter the mobile number whom you want to send the SMS 
     _ContSMS = False 
     SMSPort.WriteLine("+ TextBox1.text +" & vbCrLf & Chr(26)) 'SMS sending 
     MessageBox.Show(":send") 
     SMSPort.Close() 
    End If 
    End Sub 
+0

Спасибо за ответ. Но я не понимаю. Когда я пытаюсь использовать введенные вами коды, я получаю Backgroundworker1 не объявленным. Я совершенно новый для vb. Спасибо :) – masaKate

+0

Добавьте свою форму BackgroundWorker из Toolbox – Mysta