最近做一个程序,牵扯到在进程里面操作控件,程序如下:if (this.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(this.richTextBox1.AppendText);//追加数据
                this.BeginInvoke(d, new object[] {temp});
                SetTextCallback2 c = new SetTextCallback2(this.richTextBox1.ScrollToCaret);//滚动
                this.BeginInvoke(c);
               
            }
            else
            {
                this.richTextBox1.AppendText(temp);
                richTextBox1.ScrollToCaret();
              
            }我用的是委托函数,但是如果我用一个控件,要做很多事情,如追加数据,滚动,保存等等?我是不是要每一个属性都要加一个委托函数?能不能做一个委托函数,直接指向这个控件类,然后直接调用这个控件里面的所有事件、属性等?

解决方案 »

  1.   


    delegate void AddListItem(string item);
            private void SetItemAdd(string item)
            {
                // InvokeRequired需要比较调用线程ID和创建线程ID
                // 如果它们不相同则返回true
                if (this.listBox1.InvokeRequired)
                {
                    AddListItem d = new AddListItem(SetItemAdd);
                    this.Invoke(d, new object[] { item });
                }
                else
                {
                    listBox1.Items.Add(item);
                }
            }delegate void AddListItem(string item, string item_other);
            private void SetItemAdd(string item, string item_other)
            {
                // InvokeRequired需要比较调用线程ID和创建线程ID
                // 如果它们不相同则返回true
                if (this.listBox1.InvokeRequired)
                {
                    AddListItem d = new AddListItem(SetItemAdd);
                    this.Invoke(d, new object[] { item, item_other });
                }
                else
                {
                    listBox1.Items.Add(item);
                    listBox1.Items.Add(item_other);
                }
            }
    参数数量可以自己定义的,可以带一个判断参数,这样就知道你当前要做什么事件了
      

  2.   

    调用的时候,直接调用SetItemAdd(....);