У меня есть System.Timers.Timer, который увеличивает счетчик каждые 3 секунды. Другой поток также может установить для этой переменной любое значение при определенных условиях.
Пытался использовать Interlocked.Increment , но у него нет перегрузки для UInt16. Следующее, что нужно помнить, - это lock , но я не совсем уверен, как сделать потокобезопасный доступ (чтение / запись / приращение) к этой переменной.
Отредактировано: код изначально использовал int, но был изменен на UInt16, как было предложено
private volatile System.UInt16 mCounter = 0;
private readonly object mCounterLock = new object();
public System.UInt16 Counter {
get {
lock (mCounterLock) {
return mCounter;
}
}
set {
lock (mCounterLock) {
mCounter = value;
}
}
}
private System.Timers.Timer mCounterTimer;
void mCounter_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
lock (mCounterLock) {
Counter++;
}
}