Вот как я использую его сегодня
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);
}
}
Метод Load просто загружает все сообщение. Но я блуждаю, могу ли я загрузить, например, тему каждого сообщения и добавить его, например, в 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);
}
}
И событие progresschanged, как я обновляю элемент управления 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()
}));
}
}
ReportProgress
для каждых 10 или 20 элементов. - person Yacoub Massad   schedule 05.06.2016