2012-02-17 9 views
0

레이블이 있습니다. 3 초마다 텍스트 속성을 변경해야합니다. 이 작업을 수행하는 방법을 알려주십시오. 내가 타이머를 사용하여 시도했지만 내 응용 프로그램은 무한 루프로 가고있다. 나는이 일이 일어나기를 원하지 않는다/어떤 도움을 주시면 감사하겠습니다! 클래스의 생성자에서주기적으로 레이블 텍스트 속성 변경

timer1.Interval = 5000; 
timer1.Enabled = true; 
timer1.Tick += new System.EventHandler (OnTimerEvent); 

private void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    refreshStatusBar(); 
} 
+1

은 당신이 가지고있는 코드를 게시하시기 바랍니다. 당신이 놓친 꽤 간단 할 수 있습니다 – ChrisF

+1

우리에게 사용하고있는 코드를 보여주십시오. – Marco

+0

"하지만 내 응용 프로그램이 무한 루프에 빠지다"는 것은 무엇을 의미합니까? 또한 코드를 게시해야합니다. – ken2k

답변

0

, 당신은 초기 Label 텍스트 및 .NET Framework의 Timer 구성 요소를 초기화해야합니다.

timer.Tick += new EventHandler(timer_Tick); 
timer.Interval = (1000) * (3); // Timer will tick every 3 seconds 
timer.Enabled = true; 
timer.Start(); 

label.Text = DateTime.Now.ToString(); // initial label text. 

그런 다음 타이머의 틱 핸들러에서 Label의 텍스트 속성을 업데이트합니다.

private void timer_Tick(object sender, ElapsedEventArgs e) 
{ 
     label.Text = DateTime.Now.ToString(); // update text ... 
} 
+0

위 코드를 사용하면 응용 프로그램이 무한 루프가됩니다. 페이지를 마우스 오른쪽 단추로 클릭하거나 단추를 클릭 할 때마다 응답하지 않습니다. : – bhavna

+0

처리기에 문제가 있음을 제안합니다. 해당 코드를 포함하도록 질문을 편집하십시오. –

+0

@bhavna : 응용 프로그램이 다른 작업을 수행하지 않는 것이 확실합니까? – Marco

-1

스레드를 사용해야하며 호출을 중지하려면 yourthread.Abort();

업데이트 :에서 SynchronizationContext 방법 :

System.Threading.SynchronizationContext sync; 
private void Form1_Load(object sender, System.EventArgs e) 
{ 
    sync = SynchronizationContext.Current; 
    System.Windows.Forms.Timer tm = new System.Windows.Forms.Timer { Interval = 1000 }; 
    tm.Tick += tm_Tick; 
    tm.Start(); 
} 

//Handles tm.Tick 
private void tm_Tick(object sender, System.EventArgs e) 
{ 
    sync.Post(dopost, DateAndTime.Now.ToString()); 
} 

public void dopost(string txt) 
{ 
    Label1.Text = txt; 
} 
+0

스레드를 사용할 때 오류가 발생합니다. 크로스 스레드 작업이 유효하지 않음 : 생성 된 스레드가 아닌 스레드에서 액세스 된 컨트롤 – bhavna

+0

@bhavna : 'Invoke (...)'를 사용해야합니다. ' – Marco

+0

또는 SynchronizationContext 사용 –