在backgroundworker函数中未处理StackOverflowException
本文关键字:未处理 StackOverflowException 函数 backgroundworker | 更新日期: 2023-09-27 18:20:52
我想成为连续工作的后台工作者。但我收到错误"StackOverflowException未处理"如何修复?或者有不同的方法吗?我很抱歉我的英语不好。。
private void Form1_Load(object sender, EventArgs e)
{
workerMesaj.RunWorkerAsync();
}
private void workerMesaj_DoWork(object sender, DoWorkEventArgs e)
{
/*
... some codes
*/
System.Threading.Thread.Sleep(100);
workerMesaj_DoWork(sender,e) //i'm trying create loop forever with this code.
}
//i'm trying create loop forever with this code.
您正在创建未绑定递归,它在每个workerMesaj_DoWork
上创建堆栈帧。最终,你的堆栈耗尽了,你就有了这个例外。如果你想要永久循环,你应该使用循环,而不是递归。
不要从内部启动工作线程,否则它永远无法正确处理,因为父线程正在托管另一个子线程,并且在处理子线程之前无法进行处理。这种情况一直持续下去,从而导致溢出。
相反,通过创建这样的while循环,在工作线程内部创建循环;
private void workerMesaj_DoWork(object sender, DoWorkEventArgs e)
{
bool RunWorker=true;
while(RunWorker)
{
/*
... some codes
*/
}
}
此外,研究一下你计划做什么,因为它们很可能是一个事件触发的解决方案,如果是这样的话,那么这是一种更干净的方式来创建一个倾听者或持续工作者。