C#试写一个多线程问题(委托,Invoke(),beginInvoke())
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
namespace _
{
public partial class Form1 : Form
{
public delegate void del(string str);
public delegate void del1(string str1);
Thread thread1,thread2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.thread1 = new Thread(new ThreadStart(this.sa));
this.thread1.Start();
//MessageBox.Show(this,);
this.button1.Enabled = false;
//获取当前的线程好
int thread1id = Thread.CurrentThread.GetHashCode();
string strThreadId = Convert.ToString(thread1id);
MessageBox.Show(this,strThreadId);
}
private void progressSet(string text)
{
progressBar1.Value = 0;
progressBar1.Maximum = 999999;
for (int i = 0; i < 999999; i++)
{
progressBar1.Value++;
}
progressBar1.Value = 0;
}
private void sa()
{
del pro = new del(progressSet);
this.Invoke(pro, new object[] { "hello" });
}
private void button2_Click(object sender, EventArgs e)
{
this.thread2 = new Thread(this.sa1);
thread2.Start();
this.button2.Enabled = false;
//获取当前的线程好
int thread2id = Thread.CurrentThread.GetHashCode();
string strThreadId = Convert.ToString(thread2id);
MessageBox.Show(this, strThreadId);
}
private void sa1()
{
//其他操作
//比如将界面的TextBox内容设置一下
del1 mi1 = new del1(UpdateTextBox);
this.Invoke(mi1, new object[] { "我是一个文本框" });
}
//更新界面的方法
private void UpdateTextBox(string str)
{
//更新
this.textBox1.Text = str;
}
}
}