私はwpfイメージオブジェクトを持っており、ライブイメージを表示します。だから私は画像を更新するためにタイマーを使いました。WPFイメージングの問題
public void LoadLiveImage()
{
System.Windows.Media.PixelFormat pf = PixelFormats.Bgr24;
int stride = 4 * ((24 * cameraFrame.img_width + 31)/32);
BitmapSource bmpImage= BitmapSource.Create(cameraFrame.img_width, cameraFrame.img_height, cameraFrame.img_width, cameraFrame.img_height, pf, null, cameraFrame.img_pixel, stride);
RemoteCameraImage.Source = bmpImage;
}
void dispatcherTimer_Tick(object sender, EventArgs e)
{
LoadLiveImage();
}
問題はありません。これは問題ありません。 しかし、これをスレッドに移動しようとしましたが、イメージは表示されません。
private void showLiveImage()
{
while (this.isCameraViewOpen)
{
if (RemoteCameraImage.Dispatcher.CheckAccess())
{
System.Windows.Media.PixelFormat pf = PixelFormats.Bgr24;
int stride = 4 * ((24 * cameraFrame.img_width + 31)/32);
BitmapSource bmpImage = BitmapSource.Create(cameraFrame.img_width, cameraFrame.img_height, cameraFrame.img_width, cameraFrame.img_height, pf, null, cameraFrame.img_pixel, stride);
RemoteCameraImage.Source = bmpImage;
System.Threading.Thread.Sleep(5);
}
else
this.RemoteCameraImage.Dispatcher.Invoke(DispatcherPriority.Normal, new ImageUpdater(this.showLiveImage));
}
}
showLiveImageはスレッドとして実行しています。画像が受信され、そこに問題はありません。 img_pixel配列をbmpファイルに保存してテストし、ファイルが生成されました。画像は表示されません。そこで、ソースが割り当てられた後にメッセージボックスを表示させてから、Imageオブジェクト上のイメージを見ることができます。だから私は問題を私は睡眠時間を増やしたと思うが、イメージさえもリフレッシュされない。何が問題なのでしょうか?
編集: イメージを更新していたコードを別の関数に移動した後、正常に動作します。私はBeginInvoke()を使用しました。
ディスパッチャーがオブジェクトにアクセスできないという問題はありません。 MessageBoxのようにスレッドにユーザーアクションを追加すると、イメージが表示されます。私も凍結を試みたが、それは問題を解決しなかった。 – xaria