默認(rèn)情況下,C# 程序具有一個(gè)線程。此線程執(zhí)行程序中以 Main 方法開(kāi)始和結(jié)束的代碼。Main 直接或間接執(zhí)行的每一個(gè)命令都由默認(rèn)線程(或主線程)執(zhí)行,當(dāng) Main 返回時(shí)此線程也將終止。不過(guò),可以創(chuàng)建輔助線程,以便與主線程一起并行執(zhí)行代碼。這些線程通常稱(chēng)為“輔助線程”。
多線程處理解決了吞吐量和響應(yīng)性的問(wèn)題,但同時(shí)也帶來(lái)了資源共享問(wèn)題,如死鎖和爭(zhēng)用狀態(tài)。多線程特別適用于需要不同資源(如文件句柄和網(wǎng)絡(luò)連接)的任務(wù)。為單個(gè)資源分配多個(gè)線程可能會(huì)導(dǎo)致同步問(wèn)題,線程會(huì)被頻繁阻止以等待其他線程,從而與使用多線程的初衷背道而馳。
下面本人分享-如何通過(guò)多線程輪詢(xún)待發(fā)送郵件進(jìn)行發(fā)送。實(shí)現(xiàn)過(guò)程:設(shè)計(jì)發(fā)件箱數(shù)據(jù)表,配置發(fā)件服務(wù)器、開(kāi)發(fā)WinForm程序進(jìn)行發(fā)送。

1. 設(shè)計(jì)發(fā)件箱發(fā)件箱記錄發(fā)送郵件,內(nèi)容包括-發(fā)件人、收件人、郵件標(biāo)題、郵件內(nèi)容、增加時(shí)間、發(fā)送時(shí)間及發(fā)送失敗信息。

2.發(fā)送郵件配置發(fā)送郵件采用C# SMTP協(xié)議,需要設(shè)置發(fā)件人及發(fā)送服務(wù)器相關(guān)信息

3.實(shí)現(xiàn)WinForm 程序程序界面設(shè)計(jì)為工具欄、待發(fā)送信息,發(fā)送情況及顯示發(fā)送進(jìn)程信息。程序設(shè)計(jì)為兩個(gè)計(jì)時(shí)器,一個(gè)輪詢(xún)待發(fā)送郵件,一個(gè)進(jìn)行郵件發(fā)送。
3.1.讀取數(shù)據(jù)庫(kù)待發(fā)送郵件使用計(jì)時(shí)器輪詢(xún)發(fā)件箱,讀取待發(fā)送郵件。
3.2.線程發(fā)送郵件使用線程調(diào)用發(fā)件郵件組件進(jìn)行郵件發(fā)送。
3.3.郵件發(fā)送處理發(fā)送成功后,更新待發(fā)送郵件狀態(tài)為:“已發(fā)送”,發(fā)送失敗時(shí),更新待發(fā)送郵件狀態(tài)為:“待發(fā)送”,同時(shí)設(shè)置下次輪時(shí)間為下30分鐘。
至此,通過(guò)多線程輪詢(xún)待發(fā)送郵件進(jìn)行郵件發(fā)送功能實(shí)現(xiàn)分享完畢。多線程在C#開(kāi)發(fā)比較難調(diào)試,為此需要對(duì)程序發(fā)送日志進(jìn)行詳情記錄并報(bào)告線程執(zhí)行情況,以便開(kāi)發(fā)人員維護(hù)。單獨(dú)使用線程(Thread)進(jìn)行發(fā)送郵件,很容易造成程序假死,為此,本人采用使用計(jì)時(shí)器的方式調(diào)用線程(Thread)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注