2012-04-08 13 views
6

Mam klasę, która wymaga dynamicznego ustawiania listy. Nazywam to również tą klasą 10 razy różnymi sposobami za pomocą wątkowania.Jak utworzyć listę <string> {get; set;} na wątek,

public static List<string> MyList {get;set;}

Jestem nowy na gwint, jednak, jak mi powiedziano jest to niebezpieczne. Mam pytanie, w jaki sposób utworzyć wystąpienie MyList na wątek?

Przykład może być świetny!

+1

Do tego służą instancje. Jeśli naprawdę musisz mieć instancję na wątek, zachowaj słownik swoich list zgodnie z identyfikatorem wątku lub pamięcią lokalną wątku. –

+1

Co próbujesz zrobić? Istnieje ogromna różnica między posiadaniem pojedynczego pola statycznego i instancją na wątek. To nie jest coś, co zmienia się z powodu problemów z wątkami. Wpływa także na sposób dzielenia danych między wątkami. –

+0

@MarkByers Co chcę zrobić, to gdy używam mojej równolegle dla każdego, uruchamiam specyficzne zapytanie mysql na podstawie wyników z poprzedniego 'void'. Te wyniki następnie tworzą 'MyList', którego reszta klasy używam do wykonywania swojej funkcji –

Odpowiedz

8

Użyj atrybutu ThreadStatic.

[ThreadStatic] private static List<string> _myList; 

public static List<string> MyList { 
    get { return _myList; } 
    set { _myList = value; } 
} 

Zazwyczaj lepiej jest, aby klasa zawierająca miała kontrolę nad kolekcją; oznaczałoby to, że nie jest widoczny zewnętrznie program ustawiający i pobierający, który zwraca kopię lub kolekcję tylko do odczytu.

Ale, to może nie mieć efektu, który zamierzałeś. Każdy wątek będzie miał własną kopię kolekcji. Być może potrzebujesz tylko spojrzeć na zamków lub ponownie przemyśleć swój projekt.

+0

Chcę, aby każdy wątek zawierał własną kopię, jest on ustawiany tylko jeden raz i nie powinien być nigdy ustawiony, jednak musi być unikalny dla każdego wątku: –

+0

@Mike: wtedy "ThreadStatic" wydaje się pasować do rachunku ... Wypróbuj . –

+0

dadzą ci szansę, tutaj może być głupie pytanie, które widzę [ThreadStatic] oczywiście zaczyna kod, skąd wiem, że [Threadstatic] kończy się na końcu} MyList i nie wpływa na resztę kodu –

Powiązane problemy