我更新了这个问题并知道它工作正常..
我尝试检查我的mavecom调制解调器中的平衡但我的文本框中没有响应。它保持空白。
这是我的代码:
private SerialPort _port;
private void simpleButton1_Click(object sender, EventArgs e)
{
_port = new SerialPort();
_port.PortName = cbPort.Text;
_port.BaudRate = 115200;
_port.Parity = Parity.None;
_port.DataBits = 8;
_port.StopBits = StopBits.One;
_port.Handshake = Handshake.RequestToSend;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
port.Write("AT+CUSD=1,\"" + txtUSSD.Text + "\",15" + "\r");
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
// read the response.
var response = ((SerialPort)sender).ReadLine();
// Need to update the txtProvider on the UI thread .
//showing result in txtOutput based on txtProvider USSD Command
this.Invoke(new Action(() => txtOutput.Text = response));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
这已解决,可用于检查余额......
答案 0 :(得分:1)
良好的开端,您正在使用<DataGrid ItemsSource="{Binding Items}">
<DataGrid.Resources>
<stackOverflow:DateTimeConverter x:Key="DateTimeConverter"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding LastRunTime, Converter={StaticResource DateTimeConverter}}" Header="Last Run Time" />
</DataGrid.Columns>
</DataGrid>
正确终止AT命令行(不使用WriteLine或任何其他不正确的方法,不幸的是常见的初学者问题)。但是,命令的格式在27.007中定义为
\r
和字符串参数应始终用双引号括起来(V.250第5.4.2.2节字符串常量:AT+CUSD=[<n>[,<str>[,<dcs>]]]
...
Defined values
...
<str>: string type USSD-string ...
)。
因此,如果不详细了解textProvider对象,我相信您的代码应该是
String constants shall be bounded at the beginning and end by the double-quote character
但请注意,如果port.Write("AT+CUSD=1,\"" + txtProvider.Text + "\",15" + "\r");
包含任何txtProvider.Text
个字符,则必须将其转义(顺便说一下,不为"
,请查看5.4.2.2)。< / p>
然而,即使有上述修复,您也需要认真修改您的接待处理。您必须读取并解析来自调制解调器的每一行响应,直到您获得最终结果代码(最常见的是\"
或OK
,但还有其他几个)。任何其他方式都无法可靠地工作。有关如何正确执行此操作的伪代码结构,请参阅this answer。
如评论所述,您过早关闭了该端口。