Я использую WPF 3.5.
У меня есть цикл while в событии backgroundworker_DoWork, которое будет непрерывно передавать потоковые изображения из DSLR.
Первоначально потоковое изображение будет отображаться в PictureBox
<Grid>
<WindowsFormsHost VerticalAlignment="Top" Background="Transparent" Height="500">
<wf:PictureBox x:Name="picLiveView" />
</WindowsFormsHost>
</Grid>
Вот код:
while (!liveViewExit)
{
try
{
if (picImage != null)
lock (mylock)
{
this.picLiveView.Image = (Image)picImage.Clone();
}
}
catch
{
}
}
Это прекрасно работает.
Однако, когда я пытаюсь изменить PictureBox на WPF Image control, у меня возникает эта ошибка, когда я назначаю BitmapImage для WPF image control:
{"Вызывающий поток не может получить доступ к этому объектупотому что он принадлежит другому потоку. "}
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Png);
ms.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
try
{
if (bi != null)
{
this.imageBox.Source = bi;
}
}
catch
{
}
Почему элемент управления .NET 2 PictureBox работает, а элемент управления .NET 3.5 WPF Image - нет?
Я попробовал этот код:
BackgroundWorker bg = new BackgroundWorker();
Dispatcher disp = Dispatcher.CurrentDispatcher;
bg.DoWork += (sender, e) =>
{
// load your data
disp.Invoke(new Action(/* a method or lambda that do the assignment */));
}
bg.RunWorkerCompleted += anotherMethodOrLambda; // optional
bg.RunWorkerAsync(/*an argument object that will be visible in e.Argument*/);
Нет ошибок, но изображение не обновляется.Цикл while делает приложение не отвечающим.