C#应用实训|项目五 知识拓展
发布者:唯众
布时间:2020-12-21 11:54:55
点击量:
- 产生不重复随机数
C#中Math类Random产生随机数与随机种子有关,默认随机种子为当前时间,因为程序运行速度很快,因此可能产生的多个相同的随机数,如果在应用中希望产生完全不同的随机数,需要使用算法实现。
【
例6-10】
要求产生10个不同的随机数,数值在1到10之间。假设将1至10存入数组a,按顺序产生10个不同的随机数,存入数组b,最后输出数组b中10个随机数。
int[] a = new int[10];
for (int i = 0; i < 10; i++)
a[i] = i+1;
Random rand = new Random();
int[] b = new int[10];
int count = a.Length;
int num;
for (int j = 0; j < 10; j++)
{
num = rand.Next(0, count);
b[j] = a[num];
a[num] = a[count - 1];
count--;
}
for (int j = 0; j < 10; j++)
{
Console.WriteLine(b[j]);
}
程序运行结果如图5-10所示:
图5-10 随机数生成效果图
- 泛型委托Action
Action<T> 泛型委托:封装一个方法,该方法没有返回值。可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托。该方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能返回值。泛型委托支持多个参数。下面使用泛型委托实现例5-7。
public Form2()
{
InitializeComponent();
}
private void setText()
{
while (true)
{
if(InvokeRequired)
{
if (label1.Text.Equals("红色"))
{
this.Invoke( new Action(delegate()
{
label1.Text = "蓝色";
}));
}
else
{
this.Invoke( new Action(delegate()
{
label1.Text = "红色";
}));
}
Thread.Sleep(2000);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(new Action(setText)));
t.IsBackground = true;
t.Start();
}
项目总结
- C#支持多线程技术,通过多线程编程能提高程序执行效率。
- 委托包含对方法的引用,通过委托定义可以将委托指向多个方法,可以委托的实例化使委托调用某个具体方法。
- 事件允许一个对象将消息通知其他的对象,发送消息的对象称为事件源。
上一篇:C#应用实训|任务3 事件引发页面刷新
下一篇:C#应用实训|项目五 常见问题解析