在下面的代码中,下面这句代码中委托的方法调用了这个方法自身(方法AddReciveData)。没有见过种使用方法,十分困惑,期待解答,拜谢!!!
InsertRecvDataCallBaCk cb = new InsertRecvDataCallBaCk(AddReciveData);
全部代码:
private void AddReciveData(string s)
        {
            //在线程里以安全方式调用控件
            if (listBox_client.InvokeRequired)
            {
                InsertRecvDataCallBaCk cb = new InsertRecvDataCallBaCk(AddReciveData);
                Invoke(cb, s);
            }
            else
            {
                richTextBox1.AppendText(s);
            }
        }网络异步BeginInvoke

解决方案 »

  1.   

    那为什么我这样写就错了,我主要是不明白:本来进入到了这个方法中,然后在这个方法中有一个委拖,又去执行这个方法。这又不是递归,是什么搞法呀?
    我试着这样写,但报错啦:
     void test(int data)
          {
              test(data);
          }
      

  2.   


    void test(int data, bool flag)
    {
        if(flag)
        {
            test(data, false);
        }
        else{
            // do something
        }
    }
      

  3.   

    我这样写递归了,不知对不对。
    当然我的重点是要明白上面的那种写法是不是递归?
    如果不是,怎样去理解那种用法? int test(int data)
          {
              if (data >= 9)
              {
                  return 0;
              }
              else
              {
                  data = data + 1;
                  test(data);
              }
              return 0;
          }
      

  4.   

    http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.invokerequired.aspx
    去看下InvokeRequired是什么意思吧,他不是无限递归,如果可以直接调用,InvokeRequired是false,直接执行else,如果在跨线程调用,则InvokeRequired是ture,然后在InsertRecvDataCallBaCk方法里面再调用AddReciveData的时候,InvokeRequired就是false了,所以会执行else,不是无限递归,最多只会归一回,而你的测试代码死循环了。
      

  5.   

    http://bbs.csdn.net/topics/390602838?page=1#post-395674779你们是一个学校的?
      

  6.   

    很容易理解,如果第一次进来时 listBox_client.InvokeRequired 为 true ,
    那第二次从 Invoke 进来时 listBox_client.InvokeRequired 就为 false 了,
    自动进入 else 的执行部分,省得把 else 的部分再封装成一个方法了。
    明白了没有?
      

  7.   

    listBox_client.InvokeRequired为true时是另起的线程去执行
    else
                {
                    richTextBox1.AppendText(s);
                }
    而为false时是直接执行
    else
                {
                    richTextBox1.AppendText(s);
                }
    ,怎么能一样呢