1

ランダムに生成された2つの異なる数値を2つの異なるテキストボックスに表示したいと思います。テキストボックスの数字は毎秒変わります。System.Randomを呼び出して、乱数を作成します。

    private int RandomNumber(int min, int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }

私が直面している問題は、System.Randomがシステム時間に基づいて数値を生成するため、テキストボックスがティックの1秒ごとに2つの同一の乱数を生成することです。私は、数値の生成を20ミリ秒ずらして、この問題に対処しようとしました。これを行うには、980ミリ秒と1020ミリ秒の間隔を交互に繰り返す2つの異なるタイマー(テキストボックスごとに1つ)を作成します。

    private void timer1_Tick(object sender, EventArgs e)
    {
        int xgpscoord;

        timer1.Interval = 980;
        xgpscoord = RandomNumber(10000, 90000);
        textBoxGPSx.Text = xgpscoord.ToString();
        timer1.Interval = 1020;


    }

    private void timer2_Tick(object sender, EventArgs e)
    {

        int ygpscoord;

        timer2.Interval = 1020;
        ygpscoord = RandomNumber(10000, 90000);
        textBoxGPSy.Text = ygpscoord.ToString();
        timer2.Interval = 980;


    }

ただし、これはタイマーを同期しません。1000ミリ秒ごとに同時にチェックしてほしい。間隔を間違った場所に設定していて、各タイマーに設定した2つの間隔のうち1つだけが実際にカウントされていると思います(間違っている場合は訂正してください)。

システム時間に基づかないc#内で乱数を生成するためのより良い方法があれば、それは私の問題も解決するでしょう。

4

1 に答える 1

1

ランダムを静的にする必要があります。例:

private static Random random = new Random();
private int RandomNumber(int min, int max)
{
    return random.Next(min, max);
}

そうすれば、ランダムインスタンスを1つだけ作成し、RandomNumberを呼び出すときに新しい乱数を作成し続けることができます。

間隔については、最初に設定する必要があります(例:クラスコンストラクター)

public Form1()
{
    InitializeComponent();
    timer1.Interval = 1000;
}

private void timer1_Tick(object sender, EventArgs e)
{
    textBoxGPSx.Text = RandomNumber(10000, 90000).ToString();
    textBoxGPSy.Text = RandomNumber(10000, 90000).ToString();    
}

これがあなたの探求に役立つことを願っています。

于 2013-02-24T20:01:50.147 に答える