タイマーに問題があります。デフォルトでは、タイマーは有効になっておらず、タイマーを開始/有効にする方法があります。私が使って試してみましたタイマーの発行を有効にする
:
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されています。
あなたはどのような間隔を設定しているのですか? – Ian
間隔は50msに設定されています – TheEngineerer
タイマーは決して刻々としていないと言います(確信していますか?)ので、チックコードは本当に役立ちません。タイマーの初期化に問題があるため、コードも役立ちます。 – maka