سلام گرامی،
این تقریبا کدی هست که من برای ارسال استفاده می کنم. با یخورده تغییر می تونید بومی سازیش کنید و تو برنام خودتون ازش بهره ببرید.
هرکجا که ناخوانا بود بفرمایید تا توضیخات لازم رو بدم. البته قابل ذکره که من از دو طریق وب و GSM ارسال دارم، برای همینه که قبل هر چی اینو بررسی میکنم که بدونم کاربر قراراه با کدوم یکی بفرسته.
دوتا تابع آخر هم برای اینه که شما در زمان اجرای BackgroungWorker اجازه نوشتن در Textbox, Button رو ندارید برای همین باید از اینا برای این کار استفاده کنید(از تغییر متن بگیرید تا تغییر عکس روی دکمه و....)
protected internal BackgroundWorker BgSend;
protected internal void SetBackgroundWorker()
{
try
{
// Get your configuration:
// Check Configuration IF Send Device Is GSM Modem:
// The configure is a Object that store My Programm Setting
if (configure.DeviceSend == Config.SendDevice.GSM)
{
if (BgSend == null)
{
BgSend = new BackgroundWorker();
this.BgSend.WorkerReportsProgress = true;
this.BgSend.WorkerSupportsCancellation = true;
this.BgSend.DoWork += new System.ComponentModel.DoWorkEventHandler(this.Send Progress);
this.BgSend.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandl er(this.SendCompleted);
this.BgSend.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler( this.ShowReportStatus);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void SendMassage(object sender, EventArgs e)
{
SetBackgroundWorker();
if (BgSend.IsBusy)
{
MessageBox.Show(". لطفا تا اتمام ارسال پيام هاي قبلي صبر نماييد");
return;
}
/***********
*
* Set Your Parameters
*
***********/
BgSend.RunWorkerAsync();
}
private void SendProgress(object sender, DoWorkEventArgs e)
{
try
{
configure.GetSetting();
if (configure.DeviceSend == Config.SendDevice.GSM && SignalQuality() <= 0)
{
e.Cancel = true;
WriteToBgWorker(BtnSendCancel, "عدم سرويس دهي");
return;
}
/***********
*
* Here You Can Write Your Code For Send SMS With GSM Modem
*
***********/
/***********
*
* Check If Operation Cancel By User, Cancel BackgroundWorker
*
***********/
if (BgSend.CancellationPending)
{
e.Cancel = true;
WriteToBgWorker(BtnSendCancel, "شروع مجدد ...");
return;
}
/***********
*
* For Showing Progress
*
***********/
BgSend.ReportProgress((indexSend* 100) / (MobileCount) , "Working...");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void SendCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
if (e.Cancelled)
{
/***********
*
* Write Your Code For Cancelling
*
***********/
}
else if (e.Error != null)
{
/***********
*
* Write Your Code For Error
*
***********/
}
else
{
/***********
*
* Write Your Code For Success
*
***********/
}
}
catch { }
}
private void ShowReportStatus(object sender, ProgressChangedEventArgs e)
{
try
{
Progressbar1.PerformStep();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void WriteToBgWorker(TextBox Tbox, string text)
{
if (Tbox.InvokeRequired)
{
Tbox.Invoke(new MethodInvoker(delegate { Tbox.Text = text; }));
}
}
private void WriteToBgWorker(Button Btn, string text)
{
if (Btn.InvokeRequired)
{
Btn.Invoke(new MethodInvoker(delegate { Btn.Text = text; }));
}
}