Интересно, ComboBox с DropDownStyle=Simple имеет в значительной степени точно поведение, которое Вы ищете, я думаю.
(При сокращении высоты управления для не показа списка - и затем на более несколько пикселей - нет никакого эффективного различия между ComboBox и TextBox.)
Поскольку можно передавать элементы массива по ссылке, вы можете использовать Thread.VolatileRead
и Thread.VolatileWrite
.
Это полезно чтобы понять, что ключевое слово volatile
работает «за кулисами», используя Thread.MemoryBarrier
. Вы можете написать:
// Read
x = _arr[i];
Thread.MemoryBarrier();
// Write
Thread.MemoryBarrier();
_arr[i] = x;
Обратите внимание, что volatile
и MemoryBarrier
- это продвинутые методы, в которых легко ошибиться. Например, см. Как понять барьеры чтения и энергозависимости памяти . Обычно лучше подходят конструкции более высокого уровня, такие как lock
, Monitor
, ReaderWriterLockSlim
и другие.
Я не думаю, что вы можете
Вы не можете, volatile
определен как модификатор поля (ECMA 334).
И я тоже не думаю, что вы добьетесь того, чего хотите.
Подумайте:
private T[] _arr;
volatile T v;
.... v = _arr[x];
.... _arr[x] = v;