1

2 つのフィールドと描画用のいくつかのメソッドを持つクラスがあります。

public class DrawingTool
{
    private readonly DrawingGroup _drawingGroup;
    private DrawingImage _imageSource;

    public DrawingTool()
    {
        _drawingGroup = new DrawingGroup();
        _imageSource = new DrawingImage(_drawingGroup);
    }

    public DrawingImage GetImageSource()
    {
        return _imageSource;
    }

    public void DrawSomething()
    {
        using (DrawingContext dc = _drawingGroup.Open()) // HERE'S AN ERROR - _drawing group is being used by another thread (InvalidOperationException)
        {
           // draw something here
        }
    }
}

これはWPFプロジェクトなので、次のものもありますImage

<Image x:Name="MyImage" Width="320" Height="240"></Image>

ソースを設定しました:

_drawingTool = new DrawingTool();
Dispatcher.Invoke(() => MyImage.Source = _drawingTool.GetImageSource());

_device.FrameReady += (sender, args) => Dispatcher.Invoke(() =>
{
    _drawingTool.DrawSomething();
});

コメントからエラーが発生しています...DrawSomething()メソッドを呼び出しCheckAccess()_drawingGroup内部で使用しようとしましDrawSomething()たが、役に立ちませんでした。働くことを可能にする方法は?事前に助けてくれてありがとう!

[編集
1 DrawingGroup

[編集 2.]
誰もアイデアを持っていませんか? :(

4

1 に答える 1

0

わかりました、解決策を見つけました...それは本当に明白でした...メインスレッド(メインウィンドウコンストラクター)で描画ツール全体を初期化し、次にMyImage.Source(同じ場所で)設定する必要がありました。これですべてうまくいきます!:)

于 2013-01-07T21:15:12.943 に答える