Ich habe vor kurzem versucht, eine foreach-Schleife zu fädeln, weil es die Benutzeroberfläche einfror, wenn es lief. Diese Schleife durchsucht eine Reihe von Protokolldateien und ruft Informationen zeilenweise ab, fügt sie dann einer listView hinzu (druckt auch etwas in eine richtextBox). Das Problem, das ich habe, ist, dass nach dem Threading dieser Schleife scheint, dass weder die ListView noch die RichTextBox aktualisieren. Ich weiß genau, dass die Methode aufgerufen wird, denn wenn ich nach der 'if-Anweisung' eine MessageBox anbringe, öffnet sie sich gut, aber alles andere weigert sich zu arbeiten.BackgroundWorker Funktioniert einwandfrei
public void searchForAll(object sender, DoWorkEventArgs e)
{
if (//argument)
{
listViewEx1.Items.Clear();
int logcount = 0;
richTextBoxEx1.Text += "Print something";
richTextBoxEx1.Text += "\n";
richTextBoxEx1.SelectionStart = richTextBoxEx1.Text.Length;
richTextBoxEx1.ScrollToCaret();
foreach (User user in s.Friends)
{
foreach (string log in Directory.GetFiles(path, "*.log"))
{
string[] fileToRead = File.ReadAllLines(log);
foreach (string line in fileToRead)
{
if (line.Contains(user.Handle) && line.Contains("-r"))
{
if (!isDuplicate(c))
{
listViewEx1.Items.Add(new ListViewItem(user.Handle)
{
SubItems = { c }
});
dupCheck.Add(c);
logcount++;
}
}
}
}
dupCheck.Clear();
Thread.Sleep(1000);
}
richTextBoxEx1.Text += "Print something";
}
}
}
Ich denke hier ist eine gute Übereinstimmung für die Verwendung von 'Async/erwarten '. 'async/await' wurde für die Arbeit mit' Input/Output'-Operationen in wenig bid freundlicheren Weg als Threading oder 'BackgroundWorker' konzipiert. – Fabio
Hi, Fabio! Ich bin gerade auf async umgestiegen. Die Sache bringt mich zurück auf Platz eins. Die Verwendung von async/await friert die GUI ein, aktualisiert aber die Listenansicht und die richtextbox –
Ich bekomme auch eine Warnung, dass die asynchrone Methode fehlt, warten auf die Operatoren –