У меня есть System.Timers.Timer, который увеличивает счетчик каждые 3 секунды. Другой поток также может установить эту переменную в любое значение при некоторых условиях.
Пытался использовать Interlocked.Increment, но у него нет перегрузки для UInt16. Следующее, что нужно сделать, это блокировка, но я не уверен, как сделать потокобезопасный доступ (чтение/запись/приращение) к этой переменной.
Отредактировано: в исходном коде использовался 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++;
}
}