2008-06-22的存档

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 整理

推荐(0)
收藏