我的代码提取文件图标(甚至是拇指)。但是,如果我有很多文件,可能需要一段时间。我试图使用后台线程来加载图标。
从图标提取的表单文件创建并存储在列表中的位图。似乎对于每个本机位图,它只处理所有者线程(即在创建位图的线程中)。
在UI线程中,从那些本机创建WPF位图。
所以问题是我不知道如何在UI线程中使用后台线程中创建的位图。
- 或 -
2B。在后台线程中创建wpf位图并在UI线程中使用它们
但问题完全一样。
答案 0 :(得分:3)
加载后只需冻结图像即可。冻结对象是只读的,可以跨线程安全使用。例如:
private void _backgroundWorkerLoadImage_DoWork(object sender, DoWorkEventArgs e)
{
BitmapImage img = new BitmapImage();
img.BeginInit();
img.UriSource = imageUri;
img.EndInit();
img.Freeze();
e.Result = img;
}
void _backgroundWorkerLoadImage_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
var img = e.Result as ImageSource;
imageControl.Source = img;
}
答案 1 :(得分:1)
如果我理解你正在做什么,提高性能的一种方法可能是在阅读文件图标的过程中引入一些智能。
考虑一下目录中有很多.DOC文件的情况,并且读取所有文件的文件图标没什么意义。
您将拥有已经读取的文件图标缓存,因此无需读取每个.DOC文件的文件图标。这里有一个折扣用于将图像保存在内存中,但是你应该能够在性能和使用太多内存之间获得一个愉快的媒介。