2011-08-02 7 views
0

Webサイトからタイマーコードを見つけてアプリケーションで使用しました。タイマーコードはbutton_clickハンドラの中にありますが、メソッドを呼び出すときにタイマーを使用する必要があります。そのため、button_clickからメソッドに同じコードをコピーして貼り付けましたが、タイマーは常にゼロになります。どうすれば修正できますか?button_clickイベントハンドラの中にコード化されていてもタイマーが正常に機能しますが、メソッド内にあれば機能しません

以下は、タイマーコードです。

public partial class Form1 : Form 
{ 
    //Timer decleration 
    DateTime startTime, StopTime; 
    TimeSpan stoppedTime; 
    bool reset; 

    bool startVariabl = true; 
    // The rest of the code.. 

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 
     if (startVariable) startMethod(); 
     // 
     //The rest of the code... 
    } 

    private void startMethod() 
    { 
     //Timer 
     tmDisplay.Enabled = true; 

     // Reset display to zero 
     reset = true; 
     lblElapsed.Text = "00:00.00.0"; 

     // Start timer and get starting time 
     if (reset) 
     { 
      reset = false; 
      startTime = DateTime.Now; 
      stoppedTime = new TimeSpan(0); 
     } 
     else 
     { 
      stoppedTime += DateTime.Now - StopTime; 
     } 
    } 

    private void tmDisplay_Tick(object sender, EventArgs e) 
    { 
     DateTime currentTime; 

     //Determine Ellapsed Time 
     currentTime = DateTime.Now; 

     // Display Time 
     lblElapsed.Text = HMS(currentTime - startTime - stoppedTime); 
    } 

    private string HMS(TimeSpan tms) 
    { 
     //Format time as string; leaving off last six decimal places. 
     string s = tms.ToString(); 
     return (s.Substring(0, s.Length - 6)); 
    } 

私は新しいC#ラーナーです。

+0

タイマーのTickイベントに 'tmDisplay_Tick'を添付しましたか? 'tmDisplay'はあなたのタイマーだと仮定していますので、宣言したところで、' tmDisplay.Tick + = new EventHandler(tmDisplay_Tick);を取得し、 'Interval'プロパティを設定してください。 – keyboardP

+0

私はタイマーの宣言や、それを有効にすること以外に何かをしているところが見えません。 – Amy

+0

本当に欲しいのは、「タイマー」ではなく「ストップウォッチ」です。あるいは、あなたは 'Stopwatch'が経過した時間を記録し、' Timer'が定期的にそれを見せたいと思うかもしれません。しかしここに示したコードは不完全であるか、バグがあります。あなたの 'startMethod'の' else'部分は決して実行されないので、 'stoppedTime'は決して更新されません。 –

答えて

0

keyboardPは、この行を追加する必要がありますコメントで提案されているように:

tmDisplay.Tick += new EventHandler(tmDisplay_Tick); 

通常ティック・ハンドラは、一度設定されている(あなたが他のコールバックにそれを切り替えたり、何らかの理由でそれを無効にする必要がない限り)ので、私は追加しますあなたのフォームのコンストラクタでは、タイマーがすでに作成されていることを前提として作成されます。

関連する問題