void threadActivity()
{
Thread.Sleep(5000);
TaskbarItemInfo.ProgressValue = 0.2;
}
Sobald 5 Sekunden um sind wird ein Fehler auftreten: InvalidOperationException wurde nicht behandelt. Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet. Wie schon angekündigt heißt die Lösung hierfür: Invoken. Der veränderte Code sieht nun folgendermaßen aus:
void threadActivity()
{
Thread.Sleep(5000);
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TaskbarItemInfo.ProgressValue = 0.2;
}));
}
Sobald nun 5 Sekunden um sind wird sich der Fortschrittsbalken in der Taskleiste auf den Wert 0.2 einstellen. Zur Syntax: alles in den inneren geschweiften Klammern wird im Haupt-Thread ausgeführt, innerhalb der Klammern kann man auf Variablen, auf welche man außerhalb der geschweiften Klammern zugreifen kann, auch zugreifen. Auch darf ruhig deutlich mehr als nur ein Befehl darin stehen (wobei es ratsamer ist, nur möglichst kurze Code-Bausteine zu invoken).
Hallo Udo. Danke für diesen Post. Hat mir gerade echt weitergeholfen!
AntwortenLöschenGruß
Auch Heute hat dein Eintrag weitergeholfen...
AntwortenLöschenDanke
Auch heute mal wieder. Dankeschön!
AntwortenLöschenDanke. Hat schon wieder weitergeholfen!
AntwortenLöschen