C# WPF-更新;System.Windows.Controls.Image“;从另一个线程

C# WPF-更新;System.Windows.Controls.Image“;从另一个线程,c#,.net,wpf,multithreading,wpf-controls,C#,.net,Wpf,Multithreading,Wpf Controls,我在那个代码上得到了这个例外。 如何修复它 例外: 调用线程无法访问此文件 对象,因为另一个线程拥有 它 代码: pictureBoxMain是System.Windows.Controls.Image。您可以冻结BitmapSource,以便从任何线程访问它: void CamProc_NewTargetPosition(IntPoint Center, System.Drawing.Bitmap image) { IntPtr hBitMap = image.GetH

我在那个代码上得到了这个例外。 如何修复它

例外:

调用线程无法访问此文件 对象,因为另一个线程拥有 它

代码:


pictureBoxMain是System.Windows.Controls.Image。

您可以冻结BitmapSource,以便从任何线程访问它:

void CamProc_NewTargetPosition(IntPoint Center, System.Drawing.Bitmap image)
    {
        IntPtr hBitMap = image.GetHbitmap();
        BitmapSource bmaps = Imaging.CreateBitmapSourceFromHBitmap(hBitMap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
        bmaps.Freeze();

        Dispatcher.BeginInvoke((Action)(() =>
        {
            labelX.Content = String.Format("X: {0}", Center.X);
            labelY.Content = String.Format("Y: {0}", Center.Y);
            pictureBoxMain.Source = bmaps;
        }), DispatcherPriority.Render, null);

    }

您可以冻结图像,正如在另一个线程中所建议的那样,这样可以摆脱线程限制,但使图像不可变

void CamProc_NewTargetPosition(IntPoint Center, System.Drawing.Bitmap image)
    {
        IntPtr hBitMap = image.GetHbitmap();
        BitmapSource bmaps = Imaging.CreateBitmapSourceFromHBitmap(hBitMap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
        bmaps.Freeze();

        Dispatcher.BeginInvoke((Action)(() =>
        {
            labelX.Content = String.Format("X: {0}", Center.X);
            labelY.Content = String.Format("Y: {0}", Center.Y);
            pictureBoxMain.Source = bmaps;
        }), DispatcherPriority.Render, null);

    }