使用从后台线程生成的 RenderTargetBitmap 设置图像源
Set Image Source with generated RenderTargetBitmap from background thread
我正在后台线程中应用模糊以提高性能。此函数返回 RenderTargetBitmap
。完成后,我将通过 Dispatcher 调用图像更新并将其作为内容添加到页面中。这是像下面这样完成的:
System.Windows.Controls.Image image = new System.Windows.Controls.Image();
Thread screenshotThread = new Thread(new ThreadStart(delegate()
{
RenderTargetBitmap img = CaptureScreen(0, 0, actualWidth, actualHeight);
//System.Windows.Controls.Image image = imgBlur;
//image = new System.Windows.Controls.Image();
Application.Current.Dispatcher.Invoke(() =>
{
image.Source = img;
image.Width = actualWidth;
image.Height = actualHeight;
PageContainer.Children.Add(image);
});
}));
screenshotThread.SetApartmentState(ApartmentState.STA);
screenshotThread.Start();
我正在将图像添加到 PageContainer,这是一个网格。在运行这段代码之后,图片已经添加到页面中了。但是,图像源为空。当前没有图像可见。我怎样才能让这张图片出现?
您在不同的线程上创建了 Imagecontrol
和 RenderTargetBitmap
。我很惊讶你没有得到例外。在将其设置为 Image.Source
.
之前尝试添加 img.Freeze();
我正在后台线程中应用模糊以提高性能。此函数返回 RenderTargetBitmap
。完成后,我将通过 Dispatcher 调用图像更新并将其作为内容添加到页面中。这是像下面这样完成的:
System.Windows.Controls.Image image = new System.Windows.Controls.Image();
Thread screenshotThread = new Thread(new ThreadStart(delegate()
{
RenderTargetBitmap img = CaptureScreen(0, 0, actualWidth, actualHeight);
//System.Windows.Controls.Image image = imgBlur;
//image = new System.Windows.Controls.Image();
Application.Current.Dispatcher.Invoke(() =>
{
image.Source = img;
image.Width = actualWidth;
image.Height = actualHeight;
PageContainer.Children.Add(image);
});
}));
screenshotThread.SetApartmentState(ApartmentState.STA);
screenshotThread.Start();
我正在将图像添加到 PageContainer,这是一个网格。在运行这段代码之后,图片已经添加到页面中了。但是,图像源为空。当前没有图像可见。我怎样才能让这张图片出现?
您在不同的线程上创建了 Imagecontrol
和 RenderTargetBitmap
。我很惊讶你没有得到例外。在将其设置为 Image.Source
.
img.Freeze();