gpt4 book ai didi

c# - 从另一个线程追加到文本框

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

我有一个包含许多选项卡的表单,我想从多个线程同时写入它们(UI BackGroundWorker 等)我已经编写了这段代码,它正在主选项卡上工作(应用程序启动时可见的那个)

    public struct Struct_Append
{
public RichTextBox Screen;
public string Message;
public Color Color;
}

public void AppendAllTextAllScreen (Struct_Append append )
{
RichTextBox screenToPrint = append.Screen;
Font font = new Font("Tahoma", 8, FontStyle.Regular);
if (screenToPrint.InvokeRequired) //&& this.Visible)
{

append.Message = append.Message + "\n";
try
{
this.Invoke(new Action<Struct_Append>(AppendAllTextAllScreen), new object[] {
append });
}
catch(Exception ex)
{
//handle exception
}
return;
}
append.Message = append.Message + "\n";

screenToPrint.SelectionFont = font;
screenToPrint.SelectionColor = append.Color;
screenToPrint.AppendText(append.Message);
}

它可以在任何线程中工作,但是一旦我将屏幕设置为其他一些选项卡并触发它

        Struct_Append structAppend1 = new Struct_Append();
structAppend1.Screen = scrnSta1;
structAppend1.Color = Color.Bisque;
structAppend1.Message = "THIS IS A TEST";
AppendAllTextAllScreen(structAppend1);

VisualStudio2013 卡住了,自己重启!!!

但是当我在没有 DEBUG 的情况下运行它时它运行良好

编辑 我使用的产生错误的代码

这是我用来测试上面的appendText方法

private async void DoSomthing()
{
Task.Run(() =>
{
_Append structAppend1 = new _Append();
structAppend1.Screen = ScrnSta1; ;
structAppend1.Color = Color.Bisque;
structAppend1.Message = "THIS IS A TEST";
for (int i = 0; i < 5; i++)
{
AppendAllTextAllScreen(structAppend1);
}


});
Task.Run(() =>
{
_Append structAppend = new _Append();
structAppend.Color = Color.Aquamarine;
structAppend.Message = "THIS IS A TEST";
structAppend.Screen = ScrnSta2;
for (int j = 0; j < 5; j++)
{
AppendAllTextAllScreen(structAppend);
}
});
}

scrnsta1/2 是我的 Form(主 UI 线程)中的两个独立选项卡,我从那里调用此方法(UI 线程)

我在这里错过了什么?

最佳答案

据我了解,必须通过 Invoke method 来从不同的线程访问 Windows 窗体控件。 Control,需要定义合适的委托(delegate)。在您的示例中,这些委托(delegate)基本上是 DoSometing 实现中使用的 lambda 表达式。

关于c# - 从另一个线程追加到文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23732627/

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