【问题标题】:Problems with an application that sends SMS发送 SMS 的应用程序的问题
【发布时间】:2019-11-05 04:05:22
【问题描述】:

我有一个应用程序,每次有人在系统中注册时发送短信。

我的问题是2个用户同时注册时,系统没有发送相应的短信

例如,120 个注册用户中,只有 110 个收到了确认短信。

SMS 是从这个应用程序发送的,使用的是我通过 USB 拥有的 HUAWEI E3131 调制解调器并将其配置为调制解调器。

如何防止任何消息排队?

Dim lockObject as New Object()

SyncLock lockObject

    TextBoxMODEM.Clear() 'NUEVO MENSAJE

    SerialPort1.Write("AT" & vbCrLf) 'COMPRUEBA LA CONEXION CON EL MODEM

    Threading.Thread.Sleep(100)

    SerialPort1.Write("AT+CMGF=1" & vbCrLf) 'INDICA QUE VA A ENVIAR SMS

    Threading.Thread.Sleep(100)

    SerialPort1.Write("AT+CMGS=" & Chr(34) & TelefonoTextBox.Text & Chr(34) & vbCrLf) 'ENVIARA EL MENSAJE SIN ALMACENAMIENTO

    Threading.Thread.Sleep(100)

    SerialPort1.Write(Mensaje.ToString & Chr(26)) ' ENVIA EL MENSAJE

End SyncLock

【问题讨论】:

  • 如果您知道发送短信需要时间,为什么不在应用程序中排队。

标签: vb.net


【解决方案1】:

使用对象来同步访问代码的关键部分是很好的。但是,所有线程都应该看到同一个对象。如果您在 SyncLock 正上方声明它,那么您应该

使用 VB.NET 中的 Static 关键字将其设为本地静态,以同步对相同实例的访问

Class A
    Sub B
        Static lockObject as New Object()
        SyncLock lockObject

或者将其声明为类级别的实例字段,以同步对同一个实例的访问

Class A
    Private lockObject as New Object()
    Sub B
        SyncLock lockObject

或者在 VB.NET 中使用 Shared 关键字将其声明为静态字段,以同步对所有实例的访问

Class A
    Shared lockObject as New Object()
    Sub B
        SyncLock lockObject

如果您有多个实例需要同步访问一个块,请使用第三个选项。前两个在每个实例需要同步时很有用,例如,每个实例可能有一个串行端口,不会干扰其他实例的端口。

在任何情况下排队都不是一个坏主意。

【讨论】:

  • 你觉得我的串口上的这个配置能解决我的问题吗? SerialPort.BaudRate = 9600 SerialPort.Parity = Parity.None SerialPort.StopBits = StopBits.One SerialPort.DataBits = 8 SerialPort.Handshake = Handshake.RequestToSend SerialPort.DtrEnable = True SerialPort.RtsEnable = True SerialPort.NewLine = vbCrLf 反正怎么会解决方案是实现队列和任务,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2010-09-13
  • 2014-12-21
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多