GsmCommライブラリ、Oracleデータベース、およびDevexpressを使用して、SMS を一括送信する簡単なアプリケーションを作成しました。多数のメッセージ (25 を超えるメッセージ) に対してメッセージを送信しました。アプリケーションがハングしました。プロセスが多すぎるためだと思います。シナリオでは、ユーザーがメッセージを送信すると、データベース ( OUTBOXテーブル) に保存され、ユーザーは送信ボックス フォームのボタンをクリックします。メッセージの送信に成功すると、データベース ( SENTMESSAGEテーブル) に保存され、OUTBOXで送信が成功したメッセージが削除されます。テーブル。送信されたメッセージが処理されているとき、ユーザーは別のボタンやメニューをクリックできませんでしたが、送信が完了した後、アプリケーションは再び正常になり、ユーザーは多くのメニューをクリックできました。Gammuはサードパーティのアプリケーションであり、メッセージを送受信するサービスとして実行できるため、Gammuを使用すると可能であるという記事をいくつか読みましたが、 gsmcommライブラリで必要です。
詳細については、これが私のコードです:
//SEND BULK SMS MORE THAN 30 MESSAGE APPLICATION HANG
if (CommSetting.comm.IsConnected() == true)
{
int i;
for (i = 0; i < gridView1.DataRowCount; i++)
{
string pesan = gridView1.GetRowCellValue(i,"MESSAGE").ToString();
string ttd = lblTandaTangan.Text;
string msg = pesan + Environment.NewLine + Environment.NewLine + ttd; //SENT MESSAGE USING SIGNATURE
var listPhoneNumber = new List<string>();
listPhoneNumber.Add(gridView1.GetRowCellValue(i, "PHONENUMBER").ToString());
foreach (var phoneNumber in listPhoneNumber)
{
var pdu = new SmsSubmitPdu(msg, phoneNumber, string.Empty);
CommSetting.comm.SendMessage(pdu);
//---------------STORE TO ORACLE DB--------------------
if (koneksi_manual.con.State == ConnectionState.Open)
{
koneksi_manual.con.Close();
}
koneksi_manual.con.Open();
OracleCommand cmd = new OracleCommand();
cmd.CommandText = @"INSERT INTO MESSAGESENT (ID, DATE, TIME, PHONENUMBER, MESSAGE) VALUES
(SQ_MESSAGESENT.NEXTVAL, '" + DateTime.Now + "', TO_DATE('" + DateTime.Now + "', 'dd/MM/yyyy hh24:mi:ss'), '"
+ gridView1.GetRowCellValue(i, "PHONENUMBER") + "', '" + pesan.Replace("'", "''") + "', '" + Program.IDUser + "')";// <= Use gridView1.GetRowCellValue to get the cell value.
cmd.Connection = koneksi_manual.con;
cmd.ExecuteNonQuery();
//Sleeps system for 1000ms for refreshing GSM Modem
System.Threading.Thread.Sleep(1000);
//DELETE MESSAGE SENT FROM OUTBOX
var obj = gridView1.GetRowCellValue(i, "ID");
OracleCommand cmd2 = new OracleCommand();
cmd2.CommandText = "DELETE FROM OUTBOX WHERE ID = '" + obj + "'";
cmd2.Connection = koneksi_manual.con;
cmd2.ExecuteNonQuery();
}
MessageBox.Show("Message Sent", "Notif");
}
}
ユーザーがメッセージを送信しているときに、アプリケーションで別のメニューをクリックできるようにしたい。これを解決する方法がわかりません。おそらく誰かが提案やコンセプトを教えてくれます。本当に感謝しています。ありがとう..