synchronizacja timerów

0

Witam,

Posiadam kilka timerów, dokładniej (System.Timers.Timer). Problem mój dotyczy synchronizacji. Załóżmy, że posiadam komponent ListView w głównym oknie. Wątki powinny mieć możliwość sprawdzenia, czy istnieje już taki sam element w liście, a w przypadku gdy nie istnieje, dodać nowy. Jakich mechanizmów użyć do blokowania listy na czas zapisu?

Pozdrawiam

0

Hej !

Możesz stworzyć metodę, np.

class Form
{
  private readonly object _locker = new object();

  public void AddItemIfNotExists(string item)
  {
    lock(_locker)
    {
       //sprawdź, czy nie ma i ewentualnie dodaj
    }
  }
}

Wszystkie timery muszą otrzymać referencję do tej samej instancji klasy Form. To oczywiście najłatwiejszy scenariusz, przy założeniu, że dane przetrzymujesz w kontrolce. Mechanizmów synchronizacji osobnych wątków jest w C# sporo: semafory, mutex, locki i parę innych (więcej informacji możesz poszuka na http://www.pzielinski.com/?cat=18 - polecam gościu naprawdę sensownie wszystko opisuje :)) dodatkowo w .NET 4.0 doszły klasy ConcurrentXXX gdzie XXX to np. Dictionary, List, Bag itd i ogólnie przestrzeń nazw System.Collections.Concurrent http://msdn.microsoft.com/pl-pl/library/system.collections.concurrent.aspx

0

Sory nie mam konta i nie mogę edytować poprzedniego posta. Trochę nie doczytałem i mały fail :)

Zapewnie otrzymujesz wyjątek przy próbie zrobienia czegokolwiek na kontrolce. Poczytaj o metodzie Invoke http://msdn.microsoft.com/pl-pl/library/zyzhdc6b.aspx. Więcej nie pisze, bo temat był wałkowany setki razy ;)

0

Domyślam się o co chodzi z Invoke, ale poza debuggerem chyba powinno działać tak testowo bez wyjątków. Dziękuję bardzo za odpowiedź. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1