Hallo,
ich versuche Mails aus einem Ordner auszulesen und die wesentlichen Daten aus diesen in einer Liste (Datagridview) in eine eigenen Anwendung anzuzeigen.
In diesem Ordner sind ca 3000 Mails drin. Das ist zwar viel, aber der David Client schaff es aber ohne Verzögerung diese anzuzeigen. Mein nachfolgender Code benötigt dafür aber gut 10 Sekunden.
Daher meine Frage, ob ich hier in meinem Code etwas grundsätzlich falsch mache für diesen Zweck, oder ich einmal den gesamten Ordner intern zwischenspeichern muss, um die Daten/Mails nach Aktualisierung schneller anzeigen zu können.
Am Füllen des Datagridviews liegt es jedenfalls nicht, wenn ich diesen Bereich auskommentiere, dann dauert es genau so lange...
Code
private void ReadMails(string _ordnerID, DoWorkEventArgs e)
{
archive = account.ArchiveFromID (_ordnerID);
double fortschritt = 0;
int prozent = 0;
int i = 0;
MessageItems msg = archive.MailItems;
int anzMails = msg.Count;
foreach (MailItem mailE in msg)
{
if (mailE == null)
continue;
i++;
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
break;
}
int anzAtt = 0;
string projektNr = "";
string planNr = "";
string name = mailE.From.DisplayName;
if (name == string.Empty)
name = mailE.From.EMail;
fortschritt = (double)(i / anzMails);
prozent = Math.Min((int)fortschritt, 100);
if (backgroundWorker1.CancellationPending == false)
backgroundWorker1.ReportProgress(prozent, new object[] { mailE._ID, mailE.Subject, mailE.StatusTime, name, mailE.BodyText.PlainText, projektNr.Trim(), planNr.Trim(), anzAtt, _ordnerID });
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
object[] o = (object [])e.UserState;
dataGridView1.Rows.Add(o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7],o[8]);
}
Alles anzeigen
Grüße
Joe