我在SerialPort
的DataReceived
事件中添加了一個回調。此回調訪問某些類的屬性。那麼,這些屬性是否必須聲明爲?換句話說,主線程可能在回調寫入時訪問屬性?我應該聲明由SerialPort的回調加入的變量是否同步?
在這裏,我把一個例子:
class A {
private SerialPort serialPort;
[MethodImpl(MethodImplOptions.Synchronized)] // <-- Is this necessary?
public int Prop { get; set; }
public A(SerialPort sp){
serialPort = sp;
serialPort.DataReceived += (Object sender, SerialDataReceivedEventArgs e) => {
Prop++;
};
}
}
DataReceived事件在一個線程池線程上運行,因此多線程很可能訪問您在該事件處理程序中觸摸的任何數據。 –