Ich versuche, einen Fortschrittsbalken zu erstellen, der asynchron zum Hauptprozess arbeiten wird. Ich bin ein neues Ereignis erstellt und aufgerufen es aber jedes Mal wenn ich dann versuchen, Operationen auf dem Fortschrittsbalken auszuführen ich folgende Fehlermeldung empfangen:WPF: Asynchrone Fortschrittsbalken
„Der aufrufende Thread dieses Objekt nicht zugreifen, da ein anderer Thread besitzt es“
Der folgende Code versucht, eine Instanz des Fortschrittsbalkens als Objekt an das Ereignis zu senden. Sie ist offensichtlich fehlgeschlagen, vermittelt Ihnen jedoch eine Vorstellung davon, wie der Code aussieht.
private event EventHandler importing;
void MdbDataImport_importing(object sender, EventArgs e)
{
ProgressBar pb = (ProgressBar)sender;
while (true)
{
if (pb.Value >= 200)
pb.Value = 0;
pb.Value += 10;
}
}
private void btnImport_Click(object sender, RoutedEventArgs e)
{
importing += new EventHandler(MdbDataImport_importing);
IAsyncResult aResult = null;
aResult = importing.BeginInvoke(pbDataImport, null, null, null);
importing.EndInvoke(aResult);
}
Hat jemand Ideen, wie man das macht.
Vielen Dank im Voraus SumGuy.
Dies gilt dank der Arbeit aber es ziemlich langsam ist. Nicht sicher, ob es so ist, wie ich es gemacht habe, ich muss etwas mehr herumstochern. – SumGuy
1) Anstatt Invoke aufzurufen, beginne BeginInvoke (du würdest nicht wollen, dass dein Hintergrundverarbeitungsthread wartet, bis GUI neu gezeichnet wird, würdest du?) ?) 2) Versuchen Sie nicht, den Fortschritt jede Mikrosekunde zu aktualisieren, wählen Sie ein vernünftiges Intervall. –