次のコードを使用して、データベース内のすべての学生にSMSを送信します。
private void btnsend_Click(object sender, EventArgs e)
{
foreach (Control c in Controls)
{
c.Enabled = false;
}
if (!bgw.IsBusy)
{
bgw.RunWorkerAsync();
}
}
private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
Invoke((MethodInvoker)delegate()
{
using (var sp = new SerialPort(cbcomport.Text))
{
sp.Open();
sp.WriteLine("AT" + Environment.NewLine);
sp.WriteLine("AT+CMGF=1" + Environment.NewLine);
sp.WriteLine("AT+CMGS=\"" + dt.Rows[i]["PhoneNo"] + "\"" + Environment.NewLine);
sp.WriteLine(tbsms.Text + (char)26);
if (sp.BytesToRead > 0)
{
tbsentto.Text = i + 1 + " of " + dt.Rows.Count;
}
}
});
Thread.Sleep(5000);
}
}
private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
foreach (Control c in Controls)
{
c.Enabled = true;
}
}
私の質問は次のとおりです。例外が発生した場合、SMSが学生に送信されている間。たとえば、ポート「COM5」は存在しません。再試行とキャンセルのボタンを使用して、同じシステムメッセージをユーザーに表示したい。問題を解決した場合。つまり、デバイスを接続したユーザーが再試行ボタンを押して同じポイントからスレッドを再開し、ユーザーがキャンセルボタンを押した場合に一時停止したスレッドを停止したい。