2014-12-11 2 views
-1

는이 같은 오류를 제공합니다어떻게 C#으로 스레드에서 타이머를 사용할 수 있습니까? 나는 스레드에서 타이머를 사용할 때

Error 1 Method name expected 

이 내 코드 :

ParameterizedThreadStart th1 = new ParameterizedThreadStart(timer1_Tick(new object(),new EventArgs())); 
: 오류는이 라인에서 발생하는

private void Form1_Load(object sender, EventArgs e) 
    { 
     label1.Text = String.Format("{0:hh:mm:ss tt}", DateTime.Now); 
     ParameterizedThreadStart th1 = new ParameterizedThreadStart(timer1_Tick(new object(),new EventArgs())); 
     //ThreadStart th1 = new ThreadStart(test); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     label1.Text = String.Format("{0:hh:mm:ss tt}", DateTime.Now); 

    } 

+2

timer1_Tick은 스레드 기능이 아닌 이벤트 처리기입니다. 또한 컨트롤을 호출해야하는 스레드에서 label1.Text를 변경할 수 없습니다. – Vajura

+0

그래서 어떻게해야합니까? 나는 라벨에 시간을 보여줘야하고 매 초마다 업데이트되어야하지만, 프로그램에서 무언가를 할 때 시간은 나의 일을 마칠 때까지 업데이트되지 않는다. –

답변

1
using System.Timers; 

Label l; 
private void updateClock(object source, ElapsedEventArgs e) 
{ 
    l.Invoke((MethodInvoker)(() => 
    { 
     l.Text = String.Format("{0:hh:mm:ss tt}", DateTime.Now); 
    })); 

} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    l = new Label(); 
    l.Location = new Point(5, 5); 
    this.Controls.Add(l); 

    System.Timers.Timer timer = new System.Timers.Timer(); 
    timer.Elapsed += updateClock; 
    timer.Enabled = true; 
    timer.AutoReset = true; 
    timer.Interval = 1000; 
    timer.Start(); 
} 

이렇게하면 어떻게하고 싶은지 상상해보십시오.

관련 문제