Hjälp med trådning i C#
Hejsan!
Jag har ägnat lite tid åt att skriva en bildvisare som ska preloada bilder medans man kollar på en bild. För att detta ska funka som tänkt så måste ju inladdningen av bilder i bakgrunden, köras i en egen tråd. Jag har lagt in så att metoden Preload körs i en egen tråd. Men när preload körs i en egen tråd, så skiter det sig när jag byter bild (se felmeddelande http://piclair.com/data/cag9c.jpg).
Jag lägger upp den kod som jag tänker är relevant för detta.
List<image> images = new List<image>();
void switchimage(int images1 = 1)
{
try
{
if (currentindex + images1 >= 0 && currentindex + images1 < images.Count())
{
images[currentindex + images1].loadimage();
image1.Source = images[currentindex + images1].img;
currentindex += images1;
TransformGroup transformGroup = (TransformGroup)image1.RenderTransform;
ScaleTransform transform = (ScaleTransform)transformGroup.Children[0];
transform.ScaleX = 1;
transform.ScaleY = 1;
}
else
{
//Gör något när det är slut på bilder
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
void preload()
{
for (int i = currentindex + 1; i < currentindex + 5; i++)
{
images[i].loadimage();
}
}
class image
{
public static double CenterX { get; set; }
public static double CenterY { get; set; }
private Uri src;
public BitmapImage img { get; private set; }
public string filepath { get; private set; }
public bool loaded;
public image(string filepath, bool preload = false)
{
try
{
this.filepath = filepath;
if (preload)
{
loadimage();
}
}
catch (Exception e)
{
}
}
public void loadimage()
{
if (!loaded)
{
src = new Uri(@filepath);
img = new BitmapImage();
img.BeginInit();
img.UriSource = src;
img.CacheOption = BitmapCacheOption.OnLoad;
img.EndInit();
image.CenterX = img.Width / 2;
image.CenterY = img.Height / 2;
loaded = true;
}
}
public string getDirectory()
{
return Path.GetDirectoryName(filepath);
}
public string filename()
{
return Path.GetFileName(filepath);
}
}