2012-02-17 9 views
0

ラベルがあります。 3秒ごとにtextプロパティを変更する必要があります。私にこれを行う方法を教えてください。私はタイマーを使ってみましたが、私のアプリケーションは無限ループに入っています。私はこれが起こることを望んでいない/どんな助けもありがとう!あなたのクラスのコンストラクタで定期的にラベルのテキストプロパティを変更する

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のtextプロパティを更新します。

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を使用する –

関連する問題