Zuerst muss ich sagen, dass ich mit WPF und C# noob bin. Anwendung: Erstellen Sie Mandelbrot Bild (GUI) My Dispatcher funktioniert perfekt diesen diesen Fall:WPF Dispatcher {"Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da ein anderer Thread es besitzt."}
private void progressBarRefresh(){
while ((con.Progress) < 99)
{
progressBar1.Dispatcher.Invoke(DispatcherPriority.Send, new Action(delegate
{
progressBar1.Value = con.Progress;
}
));
}
}
ich die Nachricht (Titel) erhalten, wenn Tring dies mit dem folgenden Code zu tun:
bmp = BitmapSource.Create(width, height, 96, 96, pf, null, rawImage, stride);
this.Dispatcher.Invoke(DispatcherPriority.Send, new Action(delegate
{
img.Source = bmp;
ViewBox.Child = img; //vllt am schluss
}
));
I werde versuchen zu erklären, wie mein Programm funktioniert. Ich habe einen neuen Thread (weil GUI nicht reagieren) für die Berechnung der Pixel und der Farben erstellt. In diesem Thread (Methode) verwende ich den Dispatcher, um mein Bild in der ViewBox zu aktualisieren, nachdem die Berechnungen fertig sind.
Wenn ich die Berechnung nicht in einen separaten Thread setze, kann ich mein Image aktualisieren oder erstellen.
Sie müssen das Bild nicht im UI-Thread erstellen. Sie können es nur nicht aus einem Thread verwenden, während es auf einem anderen geändert wird (und .NET geht davon aus, dass, wenn Sie es nicht * eingefroren * markieren, es erneut geändert wird). –