Вот ЧРЕЗВЫЧАЙНО грубый пример блокировки. Оба потока теперь безопасны при добавлении и удалении из списка. Это не пример того, как создавать и использовать потоки - просто пример того, как использовать блокировку.
Class A{
private List<int> _list = new List<int>();
private void DoOtherThreadWork() {
while (true) {
//so something with thread. Sleep it, whatever...
lock(_list) {
_list.Add(1);
}
}
}
private void StartWorking(object sender, EventArgs e) {
Thread worker = new Thread(DoOtherThreadWork);
worker.Start();
while (true) {
lock(_list) {
if (_list.Count > 0) {
_list.RemoveAt(0);
}
}
}
}
}
Возможно, мне также следует добавить, что для чего-то более сложного, чем этот базовый пример, вы можете использовать другой объект в самом списке.
private object lockObj = new Object();
private void DoOtherThreadWork() {
while (true) {
//so something with thread. Sleep it, whatever...
lock(_lockObj ) {