Witam.
Nie jest pewny, czy to na 100% ma głównie coś wspólnego ze sliderem od DevExpressów. Przykład, którym się posiłkowałem niestety nie spełnia tego co bym chciał, albo robię coś źle.
Wczytywanie obrazków
public static LinkedList<ImageInfo> Load(List<string> images)
{
LinkedList<ImageInfo> list = new LinkedList<ImageInfo>();
foreach (string filePath in images)
{
list.AddLast(new ImageInfo(filePath));
}
return list;
}
Klasa elementu listy obrazków - zerżnięta żywcem z przykładu DevExpressowego
public class ImageInfo : IDisposable
{
string filePath;
Lazy<Image> image;
public ImageInfo(string path)
{
filePath = path;
image = new Lazy<Image>(() => Image.FromFile(filePath));
}
public string Path { get { return filePath; } }
public Image Image
{
get { return image.Value; }
}
public void Dispose()
{
Dispose(true);
}
void Dispose(bool disposing)
{
if (disposing)
{
if (image.IsValueCreated) image.Value.Dispose();
}
image = null;
}
}
Logika zmiany obrazka - jak się pętla skończy to zaczynam od nowa i wczytuje nowe obrazy jakie zostały wklejone. To działa pięknie
private void reklamySlider_CanGetNextPrevImage(object sender, CanGetNextPrevImageEventArgs e)
{
if (_currentImage.Next == null)
{
LoadImages();
_currentImage = _images.First;
}
else
_currentImage = _currentImage.Next;
e.CanGetImage = true;
}
private void reklamySlider_GetImage(object sender, GetImageEventArgs e)
{
if(_images.Count > 0)
{
e.Image = _currentImage.Value.Image;
}
}
Chciałbym móc też usuwać obrazki ze ścieżki, ale Windows mnie nie puszcza, ponieważ plik jest w użyciu przez proces. Jest jakieś inne wyjście, aby zwolnić obrazek z pamięci?