Cześć wszystkim
Sytuacja wygląda tak:
Mam na formatce picturebox-a "Mapa"
Mam kilka(naście/dziesiąt) obiektów "skrzyzowanie_nr", z których każdy ma w sobie wątek generujący co zadany czas zdarzenie ZmianaSwiatel
W formatce z Mapą mam metodę reagująca na te zdarzenia
private void skrzyzowanie_ZmianaSwiatel(string nazwa_skrzyzowania, int ktore_zielone)
{
if (tabControl1.SelectedIndex == 1) //zmieniaj swiatla tylko w trybie symulacyjnym
{
//rwl.EnterReadLock();
Monitor.Enter(Latch);
Graphics graf = Graphics.FromImage(mapa_symulacyjna.Image); **//TU JEST BŁĄD: Obiekt jest obecnie używany gdzie indziej!!!!!!!**
//rwl.ExitReadLock();
Image syg_z = Image.FromFile(@"obrazki_symulacyjne\sygnalizator_zielony.png");
if (ktore_zielone >= 0)
{
if (ktore_zielone == 0)
{
//rwl.EnterWriteLock();
graf.DrawImage(syg_z, (tlo_projektowe.Controls[nazwa_skrzyzowania + "p"] as PictureBox).Left + skok + 2, (tlo_projektowe.Controls[nazwa_skrzyzowania + "p"] as PictureBox).Top + skok + 4, 13, 13);
mapa_symulacyjna.Invalidate();
//rwl.ExitWriteLock();
}
if (ktore_zielone == 1)
{
//rwl.EnterWriteLock();
graf.DrawImage(syg_z, (tlo_projektowe.Controls[nazwa_skrzyzowania + "p"] as PictureBox).Left - 17, (tlo_projektowe.Controls[nazwa_skrzyzowania + "p"] as PictureBox).Top + skok + 2, 13, 13);
mapa_symulacyjna.Invalidate();
//rwl.ExitWriteLock();
}
}
syg_cz.Dispose();
syg_z.Dispose();
graf.Dispose();
Monitor.Exit(Latch);
}
}
Jak widać próbowałem z ReaderWriterLockSlim (obiekt rwl), próbowałem z Monitorem ale błąd "Obiekt jest obecnie używany gdzie indziej!" jak był tak jest.
Czy wiecie jak jeszcze mogę się przed tym zabezpieczyć tak żeby wszystkie wątki mogły sobie rysować po jednej mapie?