我想实现的功能是 ,按一下键程序执行循环,直到按停止键为止
但是如果长时间不按停止按钮,程序会越来越慢,直到电脑内存耗尽。问题应该在while循环中、求高人帮忙解决这问题,不胜感激!。
这是开始键的程序
private void StartCalcButton_Click(object sender, EventArgs e)
{
string printbox = string.Empty;
string challengetext=string.Empty;
StopFlag = false;
if (ScLboxDataValue>EcLboxDataValue)
{
this.PrintBox.Items.Clear();
this.PrintBox.Items.Add(" Start Challenge is larger than End Challenge");
this.PrintBox.SelectedIndex = this.PrintBox.Items.Count - 1;
return;
}
ValueCompare compare = new ValueCompare();
Encryption5Byte a = new Encryption5Byte();
Encryption10Byte b = new Encryption10Byte();
while ((compare.ChallengeChangeValueCompareAction(this) != ">") && (StopFlag == false))
{
StopCalcButton.Enabled = true;
StartCalcButton.Enabled = false;
ClearButton.Enabled = false;
ResetButton.Enabled = false;
parameter.Enabled = false;
KeyLengthSelect.Enabled = false;
ClearButton.Focus();
Challenge[0] = Convert.ToByte((byte)counter1);
Challenge[1] = Convert.ToByte((byte)(counter1 >> 8));
Challenge[2] = Convert.ToByte((byte)(counter1 >> 16));
Challenge[3] = Convert.ToByte((byte)(counter1 >> 24));
Challenge[4] = Convert.ToByte((byte)(counter1 >> 32));
if (_5Byteskey.Checked == true)
{
a.GetSignatureBufAction1(Challenge, KeyPage4boxDataBuf, Signature);
}
else
{
b.GetSignatureBufAction2(Challenge, Signature, KeyPage4boxDataBuf, KeyPage5boxDataBuf);
}
for (int j = 4; j >= 0; j--)
{
if (Challenge[j] < 16)
challengetext += "0" + Convert.ToString(Challenge[j], 16) + " ";
else
challengetext += Convert.ToString(Challenge[j], 16) + " ";
}
for (int i = 2; i >= 0; i--)
{
if (Signature[i] < 16)
printbox += " " + "0" + Convert.ToString(Signature[i], 16);
else
printbox += " " + Convert.ToString(Signature[i], 16);
}
//ListBox表示
printbox += " " + challengetext;
this.PrintBox.Items.Add(printbox.ToUpper());
this.PrintBox.SelectedIndex = this.PrintBox.Items.Count - 1;
printbox = null;
challengetext = null;
Application.DoEvents();
counter1++;
GC.Collect();
// GC.WaitForPendingFinalizers();
//Dispose();
//GC.SuppressFinalize(this);
}
StartCalcButton.Enabled = true;
ClearButton.Enabled = true;
ResetButton.Enabled = true;
StopCalcButton.Enabled = false;
if (StopFlag == true)
{
this.PrintBox.Items.Add(" Calculation stoped,the counter will not be reset");
this.PrintBox.SelectedIndex = this.PrintBox.Items.Count - 1;
}
if (StopFlag == false)
{
parameter.Enabled = true;
KeyLengthSelect.Enabled = true;
counter1 = ScLboxDataValue;
this.PrintBox.Items.Add(" Calculation complete");
this.PrintBox.SelectedIndex = this.PrintBox.Items.Count - 1;
}
return;
}
这是停止键程序
private void StopCalcButton_Click(object sender, EventArgs e)
{
StopFlag = true;
}