-
Random Wrapper
Random is not thread safe, hopefully this will help
Code:
Public Class RandomWrap
Inherits Random
Private Shared lock As New Threading.AutoResetEvent(True)
Public Overrides Function [Next]() As Integer
RandomWrap.lock.WaitOne()
Dim rv As Integer = MyBase.[Next]()
RandomWrap.lock.Set()
Return rv
End Function
Public Overrides Function [Next](maxValue As Integer) As Integer
RandomWrap.lock.WaitOne()
Dim rv As Integer = MyBase.[Next](maxValue)
RandomWrap.lock.Set()
Return rv
End Function
Public Overrides Function [Next](minValue As Integer, maxValue As Integer) As Integer
RandomWrap.lock.WaitOne()
Dim rv As Integer = MyBase.[Next](minValue, maxValue)
RandomWrap.lock.Set()
Return rv
End Function
Public Overrides Sub NextBytes(buffer() As Byte)
RandomWrap.lock.WaitOne()
MyBase.NextBytes(buffer)
RandomWrap.lock.Set()
End Sub
Public Overrides Function NextDouble() As Double
RandomWrap.lock.WaitOne()
Dim rv As Double = MyBase.NextDouble()
RandomWrap.lock.Set()
Return rv
End Function
Protected Overrides Function Sample() As Double
RandomWrap.lock.WaitOne()
Dim rv As Double = MyBase.Sample
RandomWrap.lock.Set()
Return rv
End Function
End Class