如何通过单击按钮在C#中生成随机颜色?

时间:2015-05-12 14:52:53

标签: c# multithreading random concurrency

我有一个程序将飞机发送到不同的目的地,并使用线程实现。但问题是我的飞机在按钮点击时不会以随机颜色生成,它会在程序运行时生成随机颜色。 (我认为这是因为我没有在按钮点击方法中正确传递方法)

问题是如何更改代码,以便在单击按钮时生成随机颜色?

我的代码如下。 (很少有单选按钮会提示用户输入目的地,当点击按钮时,飞机将会运行)

按钮点击实例的代码

    private void rbutton1_checked(Object sender, System.EventArgs e)
    {
        if (((RadioButton)sender).Checked == true)         
            destination = 1;
    }

    private void rbutton2_checked(Object sender, System.EventArgs e)
    {
        if (((RadioButton)sender).Checked == true)
            destination = 2;
    }

    private void rbutton3_checked(Object sender, System.EventArgs e)
    {
        if (((RadioButton)sender).Checked == true)
            destination = 3;
    }

    private void rbutton4_checked(Object sender, System.EventArgs e)
    {
        if (((RadioButton)sender).Checked == true)
            destination = 4;
    }

    private void btn_Click(object sender,
                           System.EventArgs e)
    {
        if (destination == 0) MessageBox.Show("Select an Option Please!!");

        else
        {
            for (int q = 0; q <1000; q++)
            {
                locked = !locked;
                this.btn.BackColor = locked ? Color.Pink : Color.LightGreen;
                lock (this)
                {
                    if (!locked)
                        Monitor.Pulse(this);
                }
            }
        }
    }

我的随机颜色生成代码不在同一个类中(在表单中)

public Color generateRandomColor()
    {

        Random random = new Random();
        Color color = Color.FromArgb(random.Next(255), random.Next(255), random.Next(255));
        return color;

    }

1 个答案:

答案 0 :(得分:1)

在程序加载时创建Random类的实例。然后当用户点击按钮生成随机颜色时,它会给你不同的值。 问题是你总是在创建一个Random类的新实例,并且默认情况下这个对象以相同的种子值开头,因此你总是使用相同的&#34; random&#34;号。

但是,请注意使用代码(在任何语言中),您将只获得伪随机。要获得真正的随机数,您必须拥有特定的硬件。