Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有无限循环的文本框中的setText_C# - Fatal编程技术网

C# 具有无限循环的文本框中的setText

C# 具有无限循环的文本框中的setText,c#,C#,我正在编写实时活动识别软件。但我不能用无限循环在文本框中设置文本。我试图搜索谷歌,但没有答案。当我使用“textbox.Text+=”ZZZZ“时,它工作,但我使用“textbox.Text=”ZZZ“,它不工作。我希望有人能告诉我如何解决 private void button1_Click(object sender, EventArgs e) { for (; ; ){ Thread.Sleep(20); ........process....

我正在编写实时活动识别软件。但我不能用无限循环在文本框中设置文本。我试图搜索谷歌,但没有答案。当我使用“textbox.Text+=”ZZZZ“时,它工作,但我使用“textbox.Text=”ZZZ“,它不工作。我希望有人能告诉我如何解决

private void button1_Click(object sender, EventArgs e)
{
     for (; ; ){
         Thread.Sleep(20);
         ........process....
         tb_activity = "AAA";
     }
 }
除非在无限循环中使用
Thread.Sleep()
调试应用程序,否则您永远无法确认un-till

原因:当您使用
Thread.Sleep()
时,会使主线程处于睡眠状态,因此使用
Thread.Sleep()
不是一个好的做法。它会挂起您的UI,因此您无法看到UI上的控件更新,例如标签文本更新、文本框文本更新之类的内容

当然,您可以调用
Application.DoEvents()
来刷新UI,但这不是一个好的做法,因为还有许多其他问题

解决方案:我建议您使用
Timer
而不是使用
Thread.Sleep()
,因为它在后台运行,所以不会挂起您的UI,您也可以在UI上看到更新

这个简单的例子向您展示了如何使用定时器在特定的时间间隔内更新Textbox上的文本

公共部分类表单1:表单
{
整数计数=0;
string text1=“这是一个滚动文本”;
System.Windows.Forms.Timer timer1=新的System.Windows.Forms.Timer();
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
按钮1.启用=错误;
textBox1.ReadOnly=true;
设定计时器(500);
}
私有void SetTimer(整数毫秒)
{            
timer1.Tick+=新事件处理程序(timer1\u Tick);
计时器1。间隔=毫秒;
timer1.Start();
}
私有无效计时器1_刻度(对象o、事件参数e)
{
如果(计数<文本1.长度)
{
textBox1.Text+=text1[count];
计数++;
}
其他的
{
timer1.Stop();
按钮1.启用=真;
textBox1.ReadOnly=false;
}
}
}

您可以在.Net中使用新的等待异步功能:

private void button1_Click(object sender, EventArgs e)
{
    EndlessTask();
}
async Task EndlessTask()
{
    for(int i = 0; true; i++)
    {
        textBox1.Text = i.ToString();
        await Task.Delay(500);
    }
}
[编辑]注意,如果要消除异步警告:

#pragma warning disable 4014
EndlessTask();
#pragma warning restore 4014

请澄清您为什么希望
=
工作?这只是设置了整个文本属性。使用
+=
有什么问题?我编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。谢谢Sudhakar Tilapudi,我尝试了iSteve Wellens的方法并取得了成功。我喜欢您的解释。谢谢
private void button1_Click(object sender, EventArgs e)
{
    EndlessTask();
}
async Task EndlessTask()
{
    for(int i = 0; true; i++)
    {
        textBox1.Text = i.ToString();
        await Task.Delay(500);
    }
}
#pragma warning disable 4014
EndlessTask();
#pragma warning restore 4014