在下面的代码中,下面这句代码中委托的方法调用了这个方法自身(方法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
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
解决方案 »
- 急~~数据结构课程设计如何把各自的模块组合在一起
- C# Winform 监控Sql Server 数据库每个表的变化
- 怎样在外部程序通过命令行启动vs插件时向插件传递参数?
- 请问MsAgent怎么实现语音识别在C#里面
- 复制拷贝 byte数组,应该用哪个API????
- ?在c#里面,如何判断点是否在区域内?
- C# 怎么禁止电脑上外网
- new SqlParameter("@UserId", order.User.Id) 这种是什么用法啊?能行?
- 请教一个关于编码的问题,有点头疼
- 用DELPHI做的OCX控件怎么实现在VB,VC,PB……等语言中通用!
- 按钮控件的mouseleave事件
- 界面使用了多语言,有简体、繁体,用Dotfuscator混肴代码后不灵
我试着这样写,但报错啦:
void test(int data)
{
test(data);
}
void test(int data, bool flag)
{
if(flag)
{
test(data, false);
}
else{
// do something
}
}
当然我的重点是要明白上面的那种写法是不是递归?
如果不是,怎样去理解那种用法? int test(int data)
{
if (data >= 9)
{
return 0;
}
else
{
data = data + 1;
test(data);
}
return 0;
}
去看下InvokeRequired是什么意思吧,他不是无限递归,如果可以直接调用,InvokeRequired是false,直接执行else,如果在跨线程调用,则InvokeRequired是ture,然后在InsertRecvDataCallBaCk方法里面再调用AddReciveData的时候,InvokeRequired就是false了,所以会执行else,不是无限递归,最多只会归一回,而你的测试代码死循环了。
那第二次从 Invoke 进来时 listBox_client.InvokeRequired 就为 false 了,
自动进入 else 的执行部分,省得把 else 的部分再封装成一个方法了。
明白了没有?
else
{
richTextBox1.AppendText(s);
}
而为false时是直接执行
else
{
richTextBox1.AppendText(s);
}
,怎么能一样呢