这就是我今天使用它的方式
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
int counter = 0;
MimekitallLoadedMessages = new List<MimeKit.MimeMessage>();
MimeKit.MimeMessage loadedMessage = null;
DirectoryInfo di = new DirectoryInfo(emailsDirectory);
FileInfo[] files = di.GetFiles();
for (int i = 0; i < files.Length; i++)
{
string uid = seenUids[0];
loadedMessage = MimeKit.MimeMessage.Load(files[i].FullName);
MimekitallLoadedMessages.Add(loadedMessage);
downloaded.Add(seenUids[i]);
counter += 1;
int nProgress = counter * 100 / files.Length;
backgroundWorker2.ReportProgress(nProgress);
}
}
方法加载只加载整个邮件。 但是,如果我可以加载每个消息的主题,并且将其添加到listView,例如,那么用户以后将能够选择特定的电子邮件来加载它的所有内容,例如html或者全身内容。
因此,仅加载主题并列出listView中的所有电子邮件列表将更快地加载邮件。我在硬盘上喜欢6000个eml文件。
加载所有文件并将所有消息添加到listView可能需要一些时间。相反,只加载/解析文本可能会更快?
有可能吗?和逻辑?也许当我第一次下载消息时,我应该创建一个包含每封电子邮件所有主题的文本文件,然后在运行我的程序时只读取文本文件中的行,每行都是一个主题?
更新
现在这是dowork事件:
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
MimeKit.HeaderList loaded = new MimeKit.HeaderList();
int counter = 0;
MimekitallLoadedMessages = new List<MimeKit.MimeMessage>();
MimeKit.MimeMessage loadedMessage = null;
DirectoryInfo di = new DirectoryInfo(emailsDirectory);
FileInfo[] files = di.GetFiles();
for (int i = 0; i < files.Length; i++)
{
string uid = seenUids[0];
loaded = MimeKit.HeaderList.Load(files[i].FullName);
var subject = loaded[MimeKit.HeaderId.Subject];
downloaded.Add(seenUids[i]);
counter += 1;
int nProgress = counter * 100 / files.Length;
backgroundWorker2.ReportProgress(nProgress, subject);
}
}
如果我更新了listView控件,那就改变了事情:
private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
pbt1.Value = e.ProgressPercentage;
pbt1.Text = e.ProgressPercentage.ToString() + "%";
pbt1.Invalidate();
if (e.UserState != null)
{
ListViewCostumControl.lvnf.Items.Add(new ListViewItem(new string[]
{
e.UserState.ToString()
}));
}
}
答案 0 :(得分:3)
只有在您希望通过HeaderList.Load
时才能解析标题。这比解析整个消息要快。这是一个例子:
string filename = ...
var headerList = HeaderList.Load(filename);
var subject = headerList[HeaderId.Subject];