我需要同时计算文本框中元素的总数和元素的数量。所以我决定创建两个线程 - 一个用于数字的长度,另一个用于元素的总和。但是当我只启动一个线程时 - 它的工作是正确的。但是当我开始第二个线程 - 表单开始工作缓慢或停止工作。 创建两个线程在winforms中遇到麻烦
thrd = new Thread(GetLength);
thrd.Start();
thrd1 = new Thread(SetSum);
thrd1.Start();
而这些线程的功能在文本框的数目的计算长度和它的元件的运算量。
private void SetSum()
{
while (true)
{
if (this.label3.InvokeRequired)
this.Invoke(new Action(() => label3.Text = this.GetSum().ToString()));
}
}
private int GetSum()
{
string n = textBox1.Text;
int sum = 0;
for (int i = 0; i < n.Length; i++)
{
try
{
sum += int.Parse(n[i].ToString());
}
catch (FormatException) { };
}
return sum;
}
private void GetLength()
{
while (true)
{
if (this.label2.InvokeRequired)
this.Invoke(new Action(() => label2.Text = " | Length = " + textBox1.Text.Length.ToString()));
}
}
问题在哪里?同步?
我已经找到了解决办法 - 我在while循环对GetLength方法
但除了线程无限循环没有其他解决方案。或者它不会移动到任何其他形式的操作。 – lapots
是的,没有线程。如果目标是在TextBox的内容发生更改时更新标签,则只需TextChanged事件即可。在这种情况下,您的线程方法有太多错误需要修复。 –
TextChanged的解决方案有效! – lapots