最近写了一段小代码 ,想了解线程的应用,但是发现递归和线程用到一起就会出现堆栈溢出的问题 。不知道怎么解决,请教高手帮忙
下面是我的实例代码
DataTable dt = new DataTable();
System.Threading.Thread th;
private void button1_Click(object sender, EventArgs e)
{
th = new System.Threading.Thread(new System.Threading.ThreadStart(star));
th.Start();
}
private void star()
{
try
{
int i = 0;
i++;
CheckForIllegalCrossThreadCalls = false;
dt.Rows.Clear();
System.Threading.Thread.Sleep(10);
star();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
---------------------------------------------------------------------
上面会报错
未处理的“System.StackOverflowException”类型的异常出现在 System.Data.dll 中。
下面是我的实例代码
DataTable dt = new DataTable();
System.Threading.Thread th;
private void button1_Click(object sender, EventArgs e)
{
th = new System.Threading.Thread(new System.Threading.ThreadStart(star));
th.Start();
}
private void star()
{
try
{
int i = 0;
i++;
CheckForIllegalCrossThreadCalls = false;
dt.Rows.Clear();
System.Threading.Thread.Sleep(10);
star();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
---------------------------------------------------------------------
上面会报错
未处理的“System.StackOverflowException”类型的异常出现在 System.Data.dll 中。
解决方案 »
- 关于 sql程序(sql2005)发布运行、怎样可以实现在别的机器上也能运行
- 自定义控件 运行时输入问题?
- 关于.Net中DES类加密后的密文长度的疑问
- 怎么把二进制的文件的数据写进CSV文件中
- C#发送EMAIL怎么出现"'SendUsing'配置值无效。"的错误?
- 怎么实现,谁能给我出个主意?
- 使用treeview控件,开发环境没有问题,发布后就出错,在线等~~~~
- 如何在treeview中加入图标?在线等答案,真的很紧急的
- 如何在 数组的末尾添加一个元素
- json返回值处理
- 在路由器上是否可以同时对内网的2个sqlserver服务器做映射?如果可以,怎么在连接字符串上区分它们?
- 怎么写网络代理的程序
同意楼上说的,在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。
{
try
{
int i = 0;
i++;
CheckForIllegalCrossThreadCalls = false;
dt.Rows.Clear();
System.Threading.Thread.Sleep(10);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}}
不是递归没有出口,而是楼主的递归代码没有出口
递归当然要有break的条件了,要不谁还用递归啊,那不是谁用谁挂吗
个人感觉,现在不是对堆栈释放不出去的问题,而是你的递归在无限循环着,也就是说如果堆栈够大的话,你的递归会永远的循环下去。
所以,你要找到一定的条件让你的递归在某个情况下停止掉。话说递归和循环再语义上确实有相近的地方,很多函数是编程语言里面就没有循环这个东东
楼主现在的代码如果改成循环等同于
while(true)
{
...
}
这样的话,你说多大的堆栈够你用呢?
这么明显的问题,哪里有出品,明明,就是一个无限递归。
看都不用看,以前ASP的堆栈只支持128层的递归,现在的不知道,估计还应该是差不多