【发布时间】:2021-09-13 00:28:09
【问题描述】:
我想要做的是一个包含文本框(或其他允许我这样做的东西)的程序,这个文本框将显示我的资源 .txt 文件中的文本,这就像一个单词之后一个或两个单词一个接一个,让用户改善对文本的眼球运动。为了更清楚,文本框将两个两个地显示单词。我可以通过使用字符串数组来做到这一点,但它只适用于列表框,而列表框不适用于这个项目,因为它是垂直的,我需要像我们在书中看到的那样水平文本。
这是显示我想要但我无法使用它的逻辑的代码,当我单击按钮时它会停止。
{
public Form1()
{
InitializeComponent();
}
string[] kelimeler;
private void button1_Click(object sender, EventArgs e)
{
const char Separator = ' ';
kelimeler = Resource1.TextFile1.Split(Separator);
}
private void button2_Click(object sender, EventArgs e)
{
for (int i = 0; i< kelimeler.Length; i++)
{
textBox1.Text += kelimeler[i]+" " ;
Thread.Sleep(200);
}
}
}
【问题讨论】:
-
你有一个循环,其内容更新 I 然后休眠。在传统的 Windows 代码中,UI 只会在消息处理程序(此处为按钮单击处理程序)返回之后 更新。如果您等待足够长的时间让所有睡眠结束(
kelimeler.Length有多大),您应该会看到最后一个字。解决此问题的传统方法是将消息发布回窗口并让该处理程序更新屏幕。但是,async和await可能可以解决问题。使您的处理程序async并使用await Task.Delay(200)而不是Thread.Sleep -
看看微软的反应式框架。然后你可以这样做:
kelimeler.ToObservable().Scan("", (a, x) => $"{a} {x}").Zip(Observable.Interval(TimeSpan.FromMilliseconds(200.0)), (s, z) => s).ObserveOn(textBox1).Subscribe(x => textBox1.Text = x);
标签: c# string text split iterator