我应该将SerialPort回调接收的变量声明为synchronized吗?

时间:2016-02-22 21:44:56

标签: c# .net

我在DataReceived的{​​{1}}事件中添加了一个回调。此回调访问某些类的属性。那么,这些属性必须声明为SerialPort吗?换句话说,主线程可能在回调写入时访问属性吗?

这里我举了一个例子:

synchronized

1 个答案:

答案 0 :(得分:0)

这是可能的,但我不知道是否真的发生了,因为这里看不到主线程的代码。

如果两个线程访问Prop,则必须以某种形式同步它。在此演示代码中,[MethodImpl(MethodImplOptions.Synchronized)]就足够了。但通常你想要保护更多的状态而不仅仅是一个值。在这种情况下,您可能需要使用lock手动锁定。

[MethodImpl(MethodImplOptions.Synchronized)]无论如何都是代码味道。我相信它只适用于Java兼容性。 15年前,微软认为人们可能希望从Java迁移到.NET。