2013-01-06 55 views
1

我已經有兩個字段和一些方法繪圖類:DrawingGroup - crossthreading

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不同?

[編輯]
沒有人有想法嗎? :(

回答

0

好吧,我找到了解決方案......這真的很明顯......我不得不在主線程(在主窗口構造函數)初始化整個繪圖工具,然後設置MyImage.Source(也在同一個地方)。現在一切正常!:)