私はWPF 3.5を使用しています。WPFイメージをバックグラウンドワーカーに表示
私は、backgroundworker_DoWorkイベントでwhileループを使用しており、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
{
}
}
これが正常に動作します。
私はWPFのImageコントロールにピクチャを変更しようとすると、私はWPFのイメージコントロールにBitmapImageのを割り当てられたときしかし、私はこのエラーを持っている:
{ "呼び出し元のスレッドが別のスレッドので、このオブジェクトにアクセスすることはできません"}
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 3.5 Picture Controlは.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ループは、アプリケーションが応答しないようにします。
たぶん、このリンクは、「どのようにそれを動作させるために、あなたhttp://msdn.microsoft.com/en-us/magazine/cc163328.aspx – michele