UI上的标签一直显示“RING RING”,然后返回空白“”。但它不会显示传入的号码,这就是我想要的。我试图添加一个if函数来检查数据中是否有'0',但由于某种原因仍然无效。
以下是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace CallerID
{
public partial class CallerID : Form
{
public CallerID()
{
InitializeComponent();
port.Open();
WatchModem();
SetModem();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
WatchModem();
}
private SerialPort port = new SerialPort("COM3");
string CallName;
string CallNumber;
string ReadData;
private void SetModem()
{
port.WriteLine("AT+VCID=1\n");
port.RtsEnable = true;
}
private void WatchModem()
{
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
public delegate void SetCallerIdText();
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
ReadData = port.ReadExisting();
//Add code to split up/decode the incoming data
if (lblCallerIDTitle.InvokeRequired)
{
if (ReadData.Contains('0'))
lblCallerIDTitle.Invoke(new SetCallerIdText(() => lblCallerIDTitle.Text = ReadData));
}
else
lblCallerIDTitle.Text = ReadData;
}
}
}
答案 0 :(得分:2)
自从我使用调制解调器已经有一段时间了,但你的调制解调器必须支持CallerID(我相信现在大多数人都这样做),你必须从你的telco获得CallerID服务(我相信你这样做) ,最后,在初始化期间将有一个AT命令发送到调制解调器以打开CallerID报告。根据您使用的调制解调器型号,命令可能不同,但通常为AT#CID=1
。您的调制解调器手册应该有AT代码可供使用。
请注意,传入号码本身是在第一个和第二个响铃之间发送的。
答案 1 :(得分:1)
这可能会指向正确的方向。