C#跨线程访问的2个示例
2008-06-22 10:28
// =============================
// C#跨线程访问的2个示例
// =============================
// 假定已经存在一个“button1”和一个“richTextBox1”
// 点击button1启动线程,线程将在richTextBox1中添加信息
// 示例1:使用 Delegate 委托
// 好像不能传递参数,不能在线程里控制显示特定的信息
private void Button1Click(object sender, EventArgs e)
{
(new Thread(new ThreadStart(settext))).Start();
}
private void settext()
{
for(int i=0;i<10;i++)
{
if (this.InvokeRequired)
this.Invoke(new DelegateChangeText(ChangeText));
else
this.ChangeText();
Thread.Sleep(2000);
}
}
private void ChangeText()
{
richTextBox1.AppendText("Counting... \r\n");
}
public delegate void DelegateChangeText();
// 示例2:使用 System.EventHandler ,可能其本身就是一个可以传递参数的 delegate 吧
// 可以带参数,其中的 "i.ToString()" 可换成其他信息作为参数传递
private void Button1Click(object sender, EventArgs e)
{
(new Thread(new ThreadStart(settext))).Start();
}
private void settext()
{
for(int i=0;i<10;i++){
this.BeginInvoke(new System.EventHandler(ChangeText), i.ToString());
Thread.Sleep(2000);
}
}
private void ChangeText(object o, System.EventArgs e)
{
richTextBox1.AppendText("Counting : "+o.ToString()+"\r\n");
}
// Aleaf 整理