StackOverflowException在backgroundworker函数中未处理

时间:2014-09-07 12:08:39

标签: c# backgroundworker stack-overflow

我想要持续工作的后台工作者。但我收到错误“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. 
     }

2 个答案:

答案 0 :(得分:3)

//i'm trying create loop forever with this code.

您正在创建未绑定的递归,它会在每个workerMesaj_DoWork上创建堆栈帧。最终你的堆栈已经用尽,你有这个例外。如果你想永远循环,你应该使用循环 - 而不是递归。

答案 1 :(得分:2)

不要从内部启动工作线程,否则它永远无法正确处置,因为父母正在托管另一个孩子,并且在孩子被处置之前无法处置。这种情况将永远继续下去,从而导致溢出。

而是通过创建像这样的while循环来创建循环INSIDE工作线程;

private void workerMesaj_DoWork(object sender, DoWorkEventArgs e)
     {
        bool RunWorker=true;
        while(RunWorker)
        {
        /*
           ... some codes
        */
        }
     }

另外研究一下你打算做多少的事情,因为它们可能是一个事件可触发的解决方案,如果是这种情况,那么创建一个监听器或持续工作者的方式就更清晰了。