【问题标题】:C# Why does seeding the random generator stop my program?C# 为什么播种随机生成器会停止我的程序?
【发布时间】:2012-03-01 17:10:31
【问题描述】:

所以我像这样在我的一个类中声明了一个随机生成器

static Random random = new Random(DateTime.Now.Millisecond);

当调用类中的函数时,即使该函数为空,它似乎也会阻止整个程序运行。

static Random random = new Random();

但是当我这样做时,它按预期工作了吗?

用代码编辑:

这个程序是专门的 XNA 游戏所以这里是更新功能

protected override void Update(GameTime gameTime)
{
    Debug.WriteLine("This happenens");
    EnemyController.generateEnemies();
    Debug.WriteLine("This does not");
}

这是另一个类的一部分

public static class EnemyController
{
    static Random random = new Random(DateTime.Now.Millisecond);

    public static void generateEnemies()
    {
        Debug.writeLine("This code wont run");
    }
}

【问题讨论】:

  • 发生了其他事情。调试时,如果你在执行过程中中断,你的程序会挂在哪一行?
  • 并不是说它在这里可能相关,但是您的程序是多线程的吗?因为Random 不是线程安全的...
  • 这是一篇关于如何使Random线程安全的文章:blogs.msdn.com/b/pfxteam/archive/2009/02/19/9434171.aspx
  • 它将运行调用函数之前的行,但不会运行函数的第一行。不,我没有使用线程
  • 我想是因为静态。如果您不小心,您可能会在使用静态初始化程序(初始化顺序)时遇到一些麻烦。尝试在单例中不使用静态。

标签: c# random xna


【解决方案1】:

System.Random 无参数构造函数的 MSDN 文档中所述:

使用与时间相关的默认种子值初始化 Random 类的新实例。

如果您对 Random 的实例化实际上是阻止您的代码的原因,那么请知道您不需要随时间播种它。但是,我会研究您的代码阻塞的其他可能性。

【讨论】:

    猜你喜欢
    • 2014-06-02
    • 2014-01-05
    • 1970-01-01
    • 2012-08-10
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多