关于使用委托的线程备忘录

时间:2022-02-23 00:59:43

首先在界面中加入name分别为button1和button2的两个按钮,以及一个name为textBox1的文本框,将textBox1的multiline设置为true(可换行)、scrollbars设置为Vertical,激发单击事件后就可以看到效果了,淡季了按钮1,在没有执行完的情况下,按钮2是按不动的,如果单击了按钮2,在没有执行完的情况下,按钮1还能单击,这就是线程的微妙之处。

 public partial class AboutThread : Form
{
public Thread thread;//线程
public delegate void drowform(int a);//委托
public AboutThread()
{
InitializeComponent();
}

/// <summary>
/// 普通的
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
for(int i=0;i<1000;i++)
{
textBox1.Text += i + " ";
}
}

/// <summary>
/// 加了线程的
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
thread = new Thread(show);
thread.Start();
}

/// <summary>
/// 线程启动后调用的方法
/// </summary>
public void show()
{
for (int i = 0; i < 2000; i++)
{
this.BeginInvoke(new drowform(drowformvoid),new object[] { i});//只要是关于界面控件的操作都在委托的那个方法执行里面执行
Thread.Sleep(5);
}
}

/// <summary>
/// 线程去操作界面控件的方法
/// </summary>
/// <param name="a"></param>
public void drowformvoid(int a)
{
textBox1.Text += a+" ";
}
}

相关文章