c# - 如何修复 { 无法评估表达式,因为 native 框架位于调用堆栈的顶部。} 在 richtextbox 中

标签 c#

我试图在 richtextbox 中显示一个大文本文件,我在我的程序中使用 backgroundworker 来避免死锁。
当我运行这一行的程序值时
this.txtText.Text += text + "\r\n";

{Text = 无法计算表达式,因为 native 框架位于调用堆栈的顶部。}
我认为 richtextbox 无法加载我的文件。
我该怎么办?

private void bgworker_DoWork(object sender, DoWorkEventArgs e)
{
    lines = File.ReadAllLines(txtPath.Text);
    foreach (string line in lines)
    {
        this.SetText(line);
    }
}

private void SetText(string text)
{
    if (this.txtText.InvokeRequired)
    {
        txtText.Invoke((ThreadStart)(() => SetText(text)));
    }
    else
    {
     this.txtText.Text += text + "\r\n";
    }
}

最佳答案

BackgroundWorker 使用单独的线程进行处理;通常,您不会在 DoWork 处理程序中更新 ui。

需要在DoWork函数中完成所有后台处理,等待RunWorkerCompleted被调用。 您需要使用 RunWorkerCompleted 来更新 ui。

    private void bgworker_DoWork(object sender, DoWorkEventArgs e)
    {
        lines = File.ReadAllLines(@"txtPath.Text");

    }

    private void bgworker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        foreach (string line in lines)
        {
            this.txtText.Text += (line + "\r\n");
        }
    }

关于c# - 如何修复 { 无法评估表达式,因为 native 框架位于调用堆栈的顶部。} 在 richtextbox 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54402177/

相关文章:

c# - 无法将图像转换为 bytes[] C#

c# - 如何验证文本框不接受 emailid

c# - 统一: Change default lifetime manager for implicit registrations and/or disable them

c# - 为单个任务创建多个线程

c# - 如何在 C# 中进行双向 tls 身份验证

c# - 获取提升的excel进程

c# - 如何正确更新 NHibernate 多对多与 Transient 对象的关系? transient 对象异常

c# - .Net 远程处理 : Indicate which local interface to use to connect to one server

c# - SVC 文件和 WCF 项目之间的关系?

c# - 将 20121004 (yyyyMMdd) 转换为有效的日期时间?