深入Lumisoft.NET实现邮件发送功能的方法详解(3)

//如果用户未指定发送账号,那么采用默认的显示名称
                    //如果为空,发送的时候,会自动采用邮件地址作为显示名称
                    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;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgxzj.html