我每次在tick(计时器)上从列表中得到随机值,但是我得到相同的3次才会改变...
代码:
let timer = new DispatcherTimer()
timer.Tick.Add <| fun _ -> X.Change()
timer.Interval <- new TimeSpan(0,0,3)
member X.Change() =
(Seq.nth
(System.Random().Next(Seq.length actions))
<| actions)()
为什么呢?我想每次都获得不同的价值
答案 0 :(得分:2)
我不完全确定您的示例,但一般原则是您应该创建一个System.Random
实例(或者每个线程一个实例,如果您有一个多线程应用程序)然后使用它多次。
尝试这样的事情:
let timer = new DispatcherTimer()
let rnd = new System.Random()
timer.Tick.Add <| fun _ -> X.Change()
timer.Interval <- new TimeSpan(0,0,3)
member X.Change() =
(Seq.nth
(rnd.Next(Seq.length actions))
<| actions)()
Random
对象是可变的,并保留一些用于生成随机值序列的状态。当您创建新实例时,它会使用当前时间初始化状态,因此如果您同时创建多个实例,则会获得相同的数字。
顺便说一句,如果你需要访问actions
的随机元素,那么最好将它们存储为数组,因为那样你就可以写:
member X.Change() =
actions.[rnd.Next(actions.Length)]()