2012-03-19 9 views
-1

タイマーに問題があります。デフォルトでは、タイマーは有効になっておらず、タイマーを開始/有効にする方法があります。私が使って試してみましたタイマーの発行を有効にする

timer1.Enabled = true; 

と無駄に

timer1.Start(); 

両方

デバッグ中、私はenable/startコマンドが実行されたが、タイマーは決して目立たないことを確認しました。事前に

おかげで、 マイク

private void timer1_Tick(object sender, EventArgs e) 
    { 

     if (CurState == HepsState.ReceivingFile) 
     { 
      int bytesLeft = (readFileSize - readByteCount); 
      if ((bytesLeft <= 16) && (bytesLeft > 0)) 
      { 
       if (timerValid == false) 
       { 
        timerValid = true; 
       } 
       else 
       { 
        int sendBytes = bytesLeft; 
        SendReceivedDataToFile(sendBytes); 
        readByteCount = readFileSize; 
        SetState(HepsState.Start, ""); 
        dataReceived = false;        //no more data in oldData[] 
        timerValid = false; 
        timer1.Enabled = false; 
       } 
      } 
     } 

     else if (CurState == HepsState.ReceivingFileInfo) 
     { 
      if (dataReceived == true) 
      { 
       if (timerValid == false) 
       { 
        timerValid = true; 
       } 
       else 
       { 
        CheckFileInfoPacket(); 
        SetState(HepsState.Start, (DateTime.Now.ToString("HH:mm:ss")) + (": File Check Complete.") + ("\n")); 
        dataReceived = false;        //no more data in oldData[] 
        timerValid = false; 

        timer1.Enabled = false; 
       } 
      } 
     } 
    } 

タイマーがある可能コード:

// looks at recieved data packet and verifies ID++ and when appropriate send previously recieved data (oldData) to file. 
    private void CheckDataPacket(ref byte[] ReadBuffer) 
    { 
     byte[] Checksum = new byte[1]; 
     Checksum[0] = Convert.ToByte("00000000", 2); 
     byte[] DataBytes = new byte[18]; 
     for (int i = 0; i < 17; i++) 
     { 
      DataBytes[i] = ReadBuffer[i + 2]; 
     } 
     DataBytes[17] = Convert.ToByte("00000000", 2); 


     if (ReadBuffer[1] == readByteID + 1) 
     { 
      int sendBytes = 16; 
      SendReceivedDataToFile(sendBytes); 
      //readByteCount = readByteCount + 16; 

      for (int i = 0; i < 16; i++)       // cganged from 17 
      { 
       oldData[i] = ReadBuffer[i + 3]; 
      } 
      CalculateChecksum(DataBytes, ref Checksum); 
      SendChecksumPacket(ref Checksum); 
      readByteID++; 
      int bytesLeft = (readFileSize - readByteCount); 
      if ((bytesLeft <= 16) && (bytesLeft > 0)) // changed from 16 tp 32 
      { 
       timer1.Enabled = true; 
       timer1.Start(); 
       //endTimerEnabled = true; 
      } 
     } 
    } 

ブレークポイントは、デバッグ中にヒット真=さtimer1.Enabledされています。

+1

あなたはどのような間隔を設定しているのですか? – Ian

+0

間隔は50msに設定されています – TheEngineerer

+1

タイマーは決して刻々としていないと言います(確信していますか?)ので、チックコードは本当に役立ちません。タイマーの初期化に問題があるため、コードも役立ちます。 – maka

答えて

0

メソッド "timer1_Tick"が "timer1.Tick"イベントに関連付けられていることを確認してください。あなたはおそらくそれを有効にし、どちらか一方、それをしませ起動するには、両方必要

timer1.Tick += new EventHandler(timer1_Tick); 
+0

あなたの助けをすべてありがとう、タイマーは現在動作しています。 – TheEngineerer

-1

: あなたは、ファイルをあなたの* .csファイル内のコードの行を次または* .designer.csを探してください。

timer.Enabledは、経過イベントを発生させる必要があることをタイマーに通知します。ですから、例えばあなたは=真timer.Enabledやった後にあなたもtimer.Startを(呼び出す必要があります)

timer.Elapsed += OnTimedEvent; 
timer.Enabled = true; 
timer.Start(); 
+0

ありがとうございました。タイマーが機能しています。 – TheEngineerer

+1

問題ではありません。 Timer.Start()は一般的にthis.Enabled = trueとして実装されています。 – TrueWill

+0

この回答は間違っており、削除する必要があります。 'Start()'メソッドと 'Enabled'プロパティは等価です。どちらか一方で十分です。 –