关于回调接收短信内容不循环的问题,谢谢

wkcode 2009-04-14 10:02:50
使用SDK开发短信收发平台,收短信使用回调,经过一番修改,终于可正常接收,但是发现一个问题:如果有2条短信需要接收,显示接收到的数据一样,包括号码、内容、时间都是一样的,具体代码如下:

//引用DLL
[DllImport("EUCPComm.dll", EntryPoint = "ReceiveSMSEx")] // 接收短信
public static extern int ReceiveSMSEx(string sn, deleSQF mySmsContent);

//回调(接收短信)
static void getSMSContent(string mobile, string senderaddi, string recvaddi, string ct, string sd, ref int flag)
{
string mob = mobile;
string content = ct;
int myflag = flag;
//在此处将短信内容存入datatable
DataRow RecRow = TempDT.NewRow();
RecRow[0] = mobile;
RecRow[1] = ct;
RecRow[2] = sd;
TempDT.Rows.Add(RecRow);
}
public delegate void deleSQF(string mobile, string senderaddi, string recvaddi, string ct, string sd, ref int flag);
deleSQF mySmsContent = new deleSQF(getSMSContent);

//声明静态的DataTable
public static DataTable TempDT = new DataTable();

//Form1_Load中初始化DataTable
private void Form1_Load(object sender, EventArgs e)
{
TempDT.Columns.Add("mob");
TempDT.Columns.Add("con");
TempDT.Columns.Add("rtime");
}

//button5单击事件收取短信
private void button5_Click(object sender, EventArgs e)
{
deleSQF mySmsContent = new deleSQF(getSMSContent);
//接收短信 序列号 函数指针
int result = 2;
while (result == 2) //当result = 2 时,说明还有下一批短信等待接收,这时需重新再调用一次ReceiveSMS方法
{
result = ReceiveSMSEx(textBox1.Text, mySmsContent);
if (result == 1)
{
textBox3.Text += "接收短信成功:"+DateTime.Now.ToString()+"\r\n";
}
else if (result == 101)
{
textBox3.Text += "网络故障:" + DateTime.Now.ToString() + "\r\n";
}
else if (result == 102)
{
textBox3.Text += "其它故障:" + DateTime.Now.ToString() + "\r\n";
}
else if (result == 105)
{
textBox3.Text += "参数指针为空:" + DateTime.Now.ToString() + "'\r\n";
}
else if (result == 0)
{
textBox3.Text += "失败:" + DateTime.Now.ToString() + "\r\n";
}
else if (result == -1)
{
textBox3.Text += "未知故障:" + DateTime.Now.ToString() + "\r\n";
}
}
//如果TempDT有记录
if (TempDT.Rows.Count > 0)
{
foreach (DataRow row in TempDT.Rows)
{
//显示短信号码、内容、时间。就这里出错,如果有2条未接受短信,点接收时,textBox3中显示接受到的两条记录是一样的
textBox3.Text += row[0].ToString() + "/" + row[1].ToString() + "/" + row[2].ToString() + "\r\n";
}
清空TempDT
TempDT.Clear();
}
}
...全文
117 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
whycom 2009-04-15
  • 打赏
  • 举报
回复
有可能 ReceiveSMSEx 调用回调函数不是同步的
wkcode 2009-04-15
  • 打赏
  • 举报
回复
在回调里接受数据 ??请明示~~谢谢
whycom 2009-04-15
  • 打赏
  • 举报
回复
应该在回调里接受数据
wkcode 2009-04-15
  • 打赏
  • 举报
回复
调试了,获得数据了,但是是重复的两条数据
shmily851206 2009-04-15
  • 打赏
  • 举报
回复
走调试看看是否已经获取到数据
freewind0521 2009-04-15
  • 打赏
  • 举报
回复
TempDT里的两条数据是一样的?如果是的话检查获取数据的地方
wkcode 2009-04-15
  • 打赏
  • 举报
回复
问题解决了,是DLL的问题,问他们要了修正版的DLL,真晕了,没测试完整怎么发布的啊

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧