Witam
Poszukuje rozwiązania, do programu w którym uruchamiane jest jednocześnie kilka wątków, pozwalające zblokować dostęp do określonych metod w momencie kiedy jeden z wątków wywoła którąś z nich.
Do tej pory wymyśliłem jedno rozwiązanie które przedstawiam poniżej ale jak dla mnie jest ono niewygodne i nieestetyczne.
Proszę was o skomentowanie co sądzicie o tym rozwiązaniu i jeśli ktoś ma lepszy pomysł to proszę o jego przedstawienie :).
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Thread _watek1 = new Thread(new ThreadStart(PetlaW1));
Thread _watek2 = new Thread(new ThreadStart(PetlaW2));
_watek1.Start();
_watek2.Start();
}
public void PetlaW1()
{
Thread _currThread = Thread.CurrentThread;
for (int i = 0; i < 1000; i++)
{
Klasa x = new Klasa();
lock (this)
{
x.Lista(1, "", "");
}
}
_currThread.Abort();
}
public void PetlaW2()
{
Thread _currThread = Thread.CurrentThread;
for (int i = 0; i < 1000; i++)
{
Klasa x = new Klasa();
lock (this)
{
x.Lista(2, "zadanie", "10");
}
}
_currThread.Abort();
}
class Klasa
{
public int Lista(int _co, string _dane1, string _dane2)
{
switch (_co)
{
case 1:
{
return PoliczIloscWpisow();
}
case 2:
{
return DodajWpis(_dane1, _dane2);
}
}
return -1;
}
private int PoliczIloscWpisow()
{
// policzenie ilości wpisów
return _iloscWpisow;
}
private int DodajWpis(string _nrZad, string _opis)
{
// dodanie danych do pliku
return -1;
}
}
Oczywiście to co jest tu napisane działa ale np metoda DodajWpis zwraca inta -1 tylko dlatego że wymaga tego metoda Lista a Lista zwraca inta bo zawiera w sobie wywołanie metody PoliczIloscWpisow której zadaniem jest właśnie zwrócenie takowej wartości.
Przedstawione rozwiązanie działa ale jak dla mnie to typowy gniot :( więc jeśli ma ktoś lepsze rozwiązanie to proszę o pomoc :)
pozdro