0

ページをリロードせずにページのラベルを更新したい。

このページは、SMS の送信に使用されます。COM ポートに接続された GSM モデムを使用しているため、テキストごとに約 3 秒かかる非常に遅いプロセスです。(オンライン サービスや USB 接続ではなく、シリアル GSM モデムを使用しているのには長い理由があります。)

で区切って複数指定できます";"。各テキストが送信されるとすぐにページを更新したい。しかし、現時点では、最後に一度にラベルを更新するだけです。これを達成する最も簡単な方法は何ですか? おそらく、AJAX、JavaScript、または Threading が考えられました。(おっしゃる通り、シンプルイズグッド!)

現在のコード:

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サービスであり、ajax呼び出しとしてサーバーにPOSTリクエストを送信し、結果を受け取ったらlabel textjavascriptで変更します。

于 2012-05-18T11:39:08.670 に答える
0

これには間違いなく AJAX を使用する必要があります。実際に非常に簡単に実装できる方法の 1 つは、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 に答える