сначала я должен сказать, что я - новичок с WPF и C#. Приложение: Создайте Изображение Mandelbrot (GUI), Мой диспетчер работает отлично этот этот случай:
private void progressBarRefresh(){
while ((con.Progress) < 99)
{
progressBar1.Dispatcher.Invoke(DispatcherPriority.Send, new Action(delegate
{
progressBar1.Value = con.Progress;
}
));
}
}
Я заставляю сообщение (Заголовок) когда Тринг делать это с ниже кода:
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
}
));
Я попытаюсь объяснить, как моя программа работает. Я создал новый поток (потому что GUI не делает ответа) для вычисления пикселей и цветов. В этом Потоке (Метод) я использую Диспетчера для Обновления моего Изображения в ViewBox после того, как вычисления будут готовы.
Когда я не помещаю вычисление в отдельный Поток затем, я могу обновить или создать свое Изображение.
MSDN сообщает: «Замороженный файл Freezable можно использовать в нескольких потоках».
Возможно, этот поток поможет: http://social.msdn.microsoft.com/Forums/ en-US / windowswic / thread / 9223743a-e9ae-4301-b8a4-96dc2335b686
Вы также можете использовать механизм очередей для передачи сообщений между потоками. В конце концов, так устроена архитектура Windows. Вот что делает диспетчер. Вы передаете ссылку в делегат, который не принадлежит потоку WPF.
Итак, да, основная идея у вас есть, но вам нужно передать растровое изображение в другой поток, используя Action
, или в вашем случае:
Dispatcher.Invoke(DispatcherPriority.Send, new Action<Bitmap>(delegate(Bitmap img) {
do things here...
}), bmp);
Вы создаете растровое изображение ( bmp
) в своем рабочем (?) Потоке, а затем передаете его потоку пользовательского интерфейса - вот это и происходит сбой.
Вам нужно создать изображение в потоке пользовательского интерфейса. Возможно, вам понадобится какой-то способ указать, какое изображение вы хотите отобразить, и передать эту информацию в пользовательский интерфейс.