私は、ロボットを制御するために画像をキャプチャして処理する必要があるプロジェクトに取り組んでいます。それらの2つのことはうまくいっています。マルチスレッドのWPFアプリケーションで変化するイメージを表示するにはどうすればよいですか?
私が把握できないように見えるのは、WPFを使用してプリプロセスイメージとポストプロセスイメージを表示する方法です。
私はこのコードを使用しているアプリを持っている:
public CamNotification(string label1, string label2, BitmapSource image1, BitmapSource image2)
private bool hwLink_SetInfos(CamNotification info)
{
try
{
Application.Current.Dispatcher.BeginInvoke((Action)(() =>
{
lblText1.Content = info.Label1;
lblText2.Content = info.Label2;
ImageBox1.Source = info.Image1;
ImageBox2.Source = info.Image2;
InvalidateVisual();
}));
return true;
}
catch (Exception ex)
{
Debugger.Break();
return false;
}
}
それは画像を記述するラベルと「image.sourceの自分の両方を変更します。
作品 - >fine < - コードを呼び出すためにWPFボタンを使用しても、2つの 'image.source'を置き換えるThreadpoolからWorkerThreadを使用してみると、画像は表示されませんラベルはあります。私はすでにボタンを押していると、画像が表示された場合
また、からの呼び出し - >WorkerThread < - MainThreadで終わる画像を削除し、新しいコンテンツにそれらを更新するのではなく、空白領域を残し。ディスパッチャを使用して
は、私はすでにラベルが更新され、すべてのcrossthead-の問題を削除したが、「PresentationFramework - > System.Windows.Controls.Imageは」cleardであると私はstackoverflowのを見ながら
:-(更新されませんこの質問が見つかりました:
を私と同様の問題に関係しているようだが、答えもOPはどちらも、彼は彼の問題を解決したかについてコメントする私を助けてきた
。私はあなたが私に与えることができる任意の助けに感謝します。
。ソースを設定する前にinfo.Image1.Freeze()とinfo.Image2.Freeze()を呼び出してみましたか? – Tone
@Toneそれだった。どうもありがとうございました。興味のある人は:{Dispatcherの前にtry {の後にinfo.image1.Freeze()とinfo.image2.Freeze()を置く。今の魅力のように動作します^^ –
よろしくお願いします。私は参考に完全な答えを追加しました。 – Tone