Как я могу расположить все изображения в общем списке в WPF?
Вот моя попытка:
//piclist is a global variable pointing to a folder on harddrive
foreach (string s in this.piclist)
{
this.picsToDisplay.Add(this.BitmapFromUri(new Uri(s)));
}
private BitmapImage LoadImage(string myImageFile)
{
BitmapImage myRetVal = null;
if (myImageFile != null)
{
BitmapImage image = new BitmapImage();
using (FileStream stream = File.OpenRead(myImageFile))
{
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = stream;
image.EndInit();
}
myRetVal = image;
}
return myRetVal;
}
и вот как я очищаю и удаляю все:
if (this.picsToDisplay.Count > 0)
{
foreach (BitmapImage b in this.picsToDisplay)
b.StreamSource.Dispose();
this.picsToDisplay.Clear();
}
Array.ForEach(Directory.GetFiles(this.tempPics),
delegate(string path) { File.Delete(path); });
Сначала происходит сбой при b.StreamSource.Dispose();
Сказать, что streamsource is null 'ссылка не установлена на экземпляр объекта'
Если я закомментирую эту строку, она вылетит в этой части: File.Delete(path);
С сообщением о том, что изображение, которое я пытаюсь удалить, используется.
Изображения, отображаемые в элементе управления изображением в WPF.Его источник уже установлен в NULL, прежде чем я приступлю к утилизации и т. Д.
Что мне не хватает, ребята?
=========== EDIT
private void btnLoadPictures_Click(object sender, EventArgs e)
{
this.ClearPicturesFromList();
DirectoryInfo Dir = new DirectoryInfo(this.pictures);
List<string> stringList = new List<string>();
FileInfo[] picList = Dir.GetFiles();
stringList = (from FI in picList
where FI.LastWriteTime.Date.ToString("dd-MM-yyyy") ==
this.dpPictureDate.SelectedDate.Value.ToString("dd-MM-yyyy")
select (FI.FullName)).ToList();
try
{
if (Directory.Exists(this.tempPics))
{
if (stringList.Count > 0)
{
foreach (string s in stringList)
{
string destFolder = System.IO.Path.Combine(this.tempPics, System.IO.Path.GetFileName(s));
File.Copy(s, destFolder, true);
}
DirectoryInfo Dir2 = new DirectoryInfo(this.tempPics);
FileInfo[] pics = Dir2.GetFiles();
this.picsInTempFolder = (from FI in pics
select (FI.FullName)).ToList();
foreach (string s in this.picsInTempFolder)
{
this.picsToDisplay.Add(this.LoadImage(s));
}
this.indexCounter = 0;
this.imgBox.Source = (BitmapImage)this.picsToDisplay[this.indexCounter];
this.tbxPictureName.Text = System.IO.Path.GetFileName(this.picsInTempFolder[this.indexCounter]);
stringList.Clear();
pics = null;
}
}
}
catch (Exception exp)
{
this.WriteToRichTextBox(exp.ToString());
}
}
при первом нажатии кнопки clearimages я получаю исключение относительно используемого файла.делать это во второй раз, на самом деле работает нормально.
Помещение thread.sleep между очисткой всех списков и прочим, чем удаление файлов из временного каталога, не работает.но так или иначе это требует своего рода задержки.