Задумывались ли вы о том, что произойдет, если читатель читает, а писатель изменяет его?
Вам следует использовать lock
, как в читателе, так и в писателе .
Если вы просматриваете и модифицируете любой другой ресурс из разных потоков, то же самое.Вы должны заблокировать один и тот же объект, чтобы избежать вторичных эффектов ...
Лучшая ссылка, которую я нашел о многопоточности вообще в C #, - это следующая книга:
Потоки в C # , Джозефом Альбахари
Там вы найдете множество примеров, подобных этому.
Вы можете прочитать это онлайн , и я предлагаю вам сделать это, потому чтоэто занимает много тем, связанных с многопоточностью, таких как Monitor.Enter
и другие
Редактировать:
Если вы храните данные в локальной переменной только потому, что вы получите к ней доступ с помощью главнойпозже, я не думаю, что это лучший вариант вообще.Вы можете изменить свои элементы управления в графическом интерфейсе без проблем, используя другие потоки, и это совсем не сложно:
Вместо того, чтобы делать:
public void UpdateTextBox(string text) {
textBox1.Text = text;
}
, вы можете сделать:
public void UpdateTextBox(string text) {
MethodInvoker m = () => { textBox1.Text = text; };
//The following lines can be encapsulated in a method, in case you need to use it again in other methods...
if (InvokeRequired) {
BeginInvoke(m);
}
else {
m.Invoke();
}
}