//如果用户未指定发送账号,那么采用默认的显示名称
//如果为空,发送的时候,会自动采用邮件地址作为显示名称
if (string.IsNullOrEmpty(SystemConfig.Default.UserEmailFrom))
{
jobInfo.mailFromDisplay = SystemConfig.Default.DefaultFromDisplayName;
}
workItemCallback = new WorkItemCallback(this.DoWork);
workItemsGroup.QueueWorkItem(workItemCallback, jobInfo);
Thread.Sleep(100);
}
catch (ObjectDisposedException ex)
{
LogTextHelper.WriteLine(ex.ToString());
continue;
}
Interlocked.Increment(ref workItemsGenerated);
}
#endregion
RefreshStatusCount();
message = string.Format("共有 {0} 个任务,还剩下 {1} 个",
workItemsGenerated, workItemsGenerated - workItemsCompleted);
CallCtrlWithThreadSafetyEx.SetText(this, message);
RecordMessage(message);
try
{
//workItemsGroup.Start();
workItemsGroup.WaitForIdle();
_smartThreadPool.Shutdown();
}
catch (Exception ex)
{
LogTextHelper.WriteLine(ex.ToString());
}
UpdateFinishStatus();
}
由于采用了多线程来处理,所以停止发送的时候,需要把相关的线程对象进行释放,如下代码所示。
复制代码 代码如下:
private void btnStop_Click(object sender, EventArgs e)
{
try
{
_smartThreadPool.Shutdown();
_smartThreadPool.Dispose();
_smartThreadPool = null;