스레드를 시작하고 양식 요소를 업데이트하지만 코드가 다음과 같이 양식을 작성하지 못하는 경우 여기에서 잘못된 것을 제안하십시오.winform 양식이 응답하지 않게 됨
private void StartTimer()
{
Thread t = new Thread(Updates);
t.IsBackground = true;
t.Start();
}
private void Updates()
{
try
{
while (true)
{
this.Invoke((MethodInvoker)delegate
{
lblTotalImages.Text = AppHelper.GetTotalCount(textBox1.Text).ToString();
if (sitename != null)
{
lblTotalPosted.Text = AppHelper.GetPostedCount(sitename).ToString();
// Application.DoEvents();
}
});
Thread.Sleep(1000);
}
}
catch (Exception ex)
{
}
}
편집 ------- 작업 병렬 라이브러리를 도입 감사 @Servy 내가 그것을 여기에 내가 타이머와 작업 공장을 사용 내가 생각해 솔루션을 사용한 적이 나중에 .NET 4 라이브러리없이 확장 2010 대 난이 당신이이 UI 스레드에서 수행되는 것을 의미합니다 Invoke
에 대한 호출의 내부 장기 실행 비 UI 작업의 일종을하고있는
enter code here private void timer1_Tick(object sender, EventArgs e)
{
Task.Factory.StartNew(() => AppHelper.GetTotalCount(textBox1.Text)).ContinueWith(t => lblTotalImages.Text = t.Result.ToString(), TaskScheduler.FromCurrentSynchronizationContext());
if (sitename != null)
{
Task.Factory.StartNew(() => AppHelper.GetPostedCount(sitename)).ContinueWith(t => lblTotalPosted.Text = t.Result.ToString(), TaskScheduler.FromCurrentSynchronizationContext());
}
}
포스트'AppHelper.GetTotalCount'와'AppHelper.GetTotalCount' 코드를. –
안녕 Sriram 덕분에 아직 구현하지 않은 두 함수 반환 1; – user3546002
'while (true)'와'Thread.Sleep'은 꽤 나쁜 조합이지만 그때도 당신의 호출은 당신의 메인 프로그램의 스레드를 끊임없이 그냥 약간의 텍스트를 업데이트하는 것입니다. – Sayse