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);
}