텍스트 상자의 요소 합계와 요소 수를 동시에 계산해야합니다. 그래서 두 개의 스레드를 생성하기로 결정했습니다. 하나는 숫자의 길이이고 다른 하나는 요소의 합입니다. 그러나 하나의 스레드 만 시작하면 올바르게 작동합니다. 그러나 두 번째 스레드를 시작하면 양식이 느리게 작동하거나 전혀 작동하지 않습니다. I는 두 스레드 winforms 문제 threads
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()));
}
}
어디에서 문제가 발생합니까? 동기화?
나는 해결책을 발견했다 - 나는 GetLength 방법
그러나 무한 루프 용 스레드 외에 다른 솔루션은 없습니다. 또는 양식이있는 다른 작업으로 이동하지 않습니다. – lapots
예가 있습니다 : 스레드가 없습니다. TextBox의 내용이 변경 될 때 레이블을 업데이트하는 것이 목적인 경우 TextChanged 이벤트 만 있으면됩니다. 스레드 접근 방식은이 문맥에서 너무 많은 오류를 수정해야합니다. –
TextChanged를 사용하는 솔루션이 작동합니다! – lapots