.net 应用程序空闲-此线程安全吗?

.net 应用程序空闲-此线程安全吗?,.net,vb.net,thread-safety,.net,Vb.net,Thread Safety,这应该是线程安全的,对吗?有没有更好的办法 Imports System.Threading Public Class ApplicationIdleHelper Private Shared lastInputTicks As Long Public Shared Sub SetLastInputTime(dt As DateTime) Interlocked.Exchange(lastInputTicks, dt.Ticks) End Sub

这应该是线程安全的,对吗?有没有更好的办法

Imports System.Threading

Public Class ApplicationIdleHelper
    Private Shared lastInputTicks As Long

    Public Shared Sub SetLastInputTime(dt As DateTime)
        Interlocked.Exchange(lastInputTicks, dt.Ticks)
    End Sub

    Public Shared Function GetIdleTime() As Integer
        Return (Now - New DateTime(Interlocked.Read(lastInputTicks))).TotalSeconds
    End Function
End Class
在我的应用程序中,我使用
PreFilterMessage
事件中的
SetLastInputTime
方法设置
lastInputicks
值。在其他一些
线程中
我必须检查这个变量。我通过调用
GetIdleTime
来实现这一点,但现在我不确定这是线程安全的还是会遇到麻烦


提前谢谢你

您的解决方案看起来不错。
Interlocked
涵盖了对所讨论变量的所有访问,因此访问应该是正常的,并且在
GetIdleTime
函数中不会收到任何损坏的值

唯一需要注意的是,您可能会从
GetIdleTime
函数接收到旧值,因为与新值的交换没有完成。因此,如果同时或多或少调用了
SetLastInputTime
GetIdleTime
,则
GetIdleTime
函数可能显示也可能不显示更新的时间

无论如何,我认为没有比这更好的办法了。重叠通话问题是你永远无法摆脱的。这就是多线程的本质