0

我想刷新页面上的标签而不重新加载页面。

该页面用于发送短信。因为我使用的是连接到 COM 端口的 GSM 调制解调器,所以每个文本需要大约 3 秒的时间,这是一个相当缓慢的过程。(我使用串行 GSM 调制解调器而不是在线服务或 USB 连接的原因很长。)

可以指定多个数字,由 分隔";"。我想在发送每个文本后立即更新页面;但目前它只是在最后一口气更新标签。实现这一目标的最简单方法是什么?想法可能是 AJAX、JavaScript 或线程。(正如我所说,简单就是好!)

当前代码:

SerialPort sp = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);
        try
        {
            String[] numbers = tbNo.Text.Split(';');


            foreach (string n in numbers)
            {

                sp.Open();

                sp.Write("AT+CMGF=1" + (char)(13));

                Thread.Sleep(200);

                sp.Write("AT+CMGS=" + n.Replace(" ", string.Empty) + (char)(13));

                Thread.Sleep(200);

                sp.Write(tbMsg.Text + (char)(13) + (char)(26));

                Thread.Sleep(3000);

                sp.Close();

                Label1.Text = Label1.Text + "Message sent to " + n + "<br />";

            }

        } catch (Exception error) {

            Label1.Text = error.Message;
        };
4

2 回答 2

0

如果你有 ASP.net,最好的方法是在服务器端创建一个服务,它可以是一个 WCF Rest 服务,将一个 post 请求作为 ajax 调用发送到服务器,并在收到结果后更改label textjavascript。

于 2012-05-18T11:39:08.670 回答
0

你肯定想为此使用一些 AJAX。实际上很容易实现的一种方法是使用SignalR

SignalR 是一个支持客户端和服务器之间实时连接的框架。这使您的代码更容易。如果您不使用 SignalR,则必须手动实现轮询(客户端浏览器每隔 X 秒向服务器询问您的任务状态是什么)或对此进行一些变体。

SignalR 隐藏使用的底层机制并在服务器和客户端之间创建连接。

您在服务器上的代码将如下所示:

public class SmsHub : Hub
{
   public Task SendMessages(string input)
   {
      // ... send sms message

     Caller.updateStatus('Message send!');
   }
}

在您的客户端上,您将使用 javascript 集线器发送和接收消息。该updateStatus函数可以将 HTML 消息附加到某些信息 div。

这是 Scott Hanselman 的一篇不错的博客文章,也可以帮助您入门。

于 2012-05-18T11:41:39.770 回答