c# - Richtextbox.text抛出stackoverflow异常按事件添加行

时间:2016-05-03 20:26:58

标签: c# .net winforms event-handling richtextbox

我正在通过一个事件向RickTextbox添加行,我正在使用此代码。

  private void Process(object sender, DataReceivedEventArgs e)
    {
        if (richTextBox1.InvokeRequired)
        {
            BeginInvoke(new Mesage(Process), sender, e);
        }
        else
        {
            richTextBox1.Text += e.Data + Environment.NewLine;

            richTextBox1.SelectionStart = richTextBox1.Text.Length;
            richTextBox1.ScrollToCaret();

            Application.DoEvents();
        }
    }

我正在尝试在C#WinForms中向RichTextbox添加新行,但它会在此行中抛出StackOverflow异常。

 richTextBox1.Text += e.Data + Environment.NewLine;

e.Data是一个字符串。我该怎么做才能继续添加行?

编辑

  

该进程与fluentmigrator进程相关联,返回多行,因为它正在对数据库运行查询。

1 个答案:

答案 0 :(得分:0)

经过一些研究和测试,我改变了代码以减少对函数的调用次数。在如此短的时间内调用Process方法多次抛出异常。更改后,错误不再出现。

private void Process(object sender, DataReceivedEventArgs e){
if (richTextBox1.InvokeRequired)
{
    invoked = true;
    BeginInvoke(new Mensagem(ProcessaMensagem), sender, e);
}
else
{
    try
    {       
        commands.Add(e.Data);
        count++;
        if (count % 5 == 0)
        {
            richTextBox1.Lines = commands.ToArray();
            richTextBox1.SelectionStart = richTextBox1.Text.Length;
            richTextBox1.ScrollToCaret();

            Application.DoEvents();             
        }       
    }
    catch (Exception ex)
    {
        //log logic
    }
}}