获取错误调用线程无法访问此对象,因为另一个线程拥有它wpf,如何使用Dispatch.invovef

时间:2015-01-23 07:39:37

标签: wpf

我正在尝试捕获位图图像并在bitmapsource中显示我使用的转换方法如下

 [System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);

private BitmapSource Bitmap2BitmapImage(Bitmap bitmap)
{
    BitmapImage retval;

    try
    {
        retval = Imaging.CreateBitmapSourceFromHBitmap(
                     bitmap.GetHbitMap(),
                     IntPtr.Zero,
                     Int32Rect.Empty,
                     BitmapSizeOptions.FromEmptyOptions());
    }
    finally
    {
        DeleteObject(hBitmap)
    }

    return retval;
}

以及显示图像的代码如下

Bitmap bmp= (Bitmap)e.frame.clone();
imgPic.source= imageconversion(bmp);

我为此错误谷歌...我来了解dispatch.invoke方法。请建议我如何在我的代码中使用

1 个答案:

答案 0 :(得分:0)

可以使用System.Threading.ThreadStart的新实例调用调度程序,该实例获取包含要在UI线程上执行的代码的lambda表达式。请务必使用Application.Current.Dispatcher而不是Dispatcher.Current,因为后者不一定会返回UI线程。

Application.Current.Dispatcher.Invoke(
    DispatcherPriority.Input, 
    new ThreadStart(() => 
    { 
        // Do something 
    }));