gpt4 book ai didi

c# - Console 输出重定向到 textbox 时发生跨线程操作

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:48 24 4
gpt4 key购买 nike

<分区>

一般而言,我是 C# 和 GUI 开发的新手。如果这是一个老问题,请告诉我那个来源,我会记下这个问题。

我的情况:所以我正在编写一个 GUI,将一个函数的控制台输出重定向到我的 Windows 应用程序窗体中的文本框。控制台输出仅向用户显示信息,如设备序列号、当前软件版本等。

我的问题:这个表格很好用,除了更新软件的过程需要几分钟,这会卡住我的表格直到它完成。现在,我知道实现后台 worker 可以缓解这个问题。但是,当我实现后台工作人员时,我收到以下错误。

Cross-thread operation not valid: Control 'TextBox' accessed from a thread other than the thread it was created on.

我的代码总结如下:

public class Form1 : Form
{
this.backgroundWorker1.DoWork += new
System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
BigProcess(bw);
}

private void BigProcess(BackgroundWorker bw)
{
// lengthy operation that includes lots of
Console.WriteLine("feedback stuff for the user");
}

private void button1_Click(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
}
}

在这个项目中,我还有一个派生自 StringWriter 的类 TextBoxStreamWriter,它负责为我重定向控制台输出。在 TextBoxStreamWriter 中,我覆盖了 WriteLine 方法和 Write 方法。

这是我正在做的一个例子:

public override void WriteLine(string value)
{
base.WriteLine(DateTime.Now.ToString(value));
textBoxOutput.AppendText(value.ToString() + Environment.NewLine);
writer.Write(value);
}

调用此方法时抛出 InvalidOperationException。

如何使这个线程安全?任何帮助,将不胜感激。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com