3

画像を表示するWPFコントロールを作成しました。今、私はその画像を非常に速い速度で変更したいと思います。画像を保持し、変更されたときにコントロール内の画像を更新するChangedEventHandlerを持つImageContainerクラスを作成しました。

実行されるコードは次のようになります。

videoImageThread = new Thread(
            new ThreadStart(
              delegate()
              {
                  this.VideoCapture.Dispatcher.Invoke(
                    System.Windows.Threading.DispatcherPriority.Normal,
                    new Action(
                      delegate()
                      {

                          videoImage.Source = VideoImageContainer.Instance.VideoBitmapSourceImage;

                      }
                  ));
              }
          ));


private void Instance_VideoRefresh()
    {
        if (VideoImageContainer.Instance.VideoImage != null)
        {
            lock (videoImageSetLock)
            {
                videoImageThread.Start();
            }
        }
    }

このコードはSystem.Reflection.TargetInvocationExceptionをスローしますが、何が間違っていますか?

4

2 に答える 2

1

スレッドを呼び出すためにスレッドを呼び出しているように思えますか?!

次のように、ディスパッチャでアクションを直接呼び出してみましたか:

private void Instance_VideoRefresh()
{
    if (VideoImageContainer.Instance.VideoImage != null)
        this.VideoCapture.Dispatcher.Invoke(
                System.Windows.Threading.DispatcherPriority.Normal,
                new Action(
                  delegate()
                  {
                      videoImage.Source = VideoImageContainer.Instance.VideoBitmapSourceImage;
                  }
              ));
}
于 2010-01-24T12:33:53.620 に答える
0

videoImage.Sourceをプロパティにバインドし、Instance_VideoRefreshメソッドでそのプロパティを変更してみましたか?

以前、Image / List <ImageSource> / Timerの組み合わせで試しましたが、かなりうまく機能します。

于 2010-01-24T08:42:31.047 に答える