0
我正在寫一個小的C#程序哈希哈希。我想它做的兩件事情(有點像基準):(基準)無止境的循環沒有凍結線程
hash = md5.ComputeHash(hash);
tell me how many times per second it can do this.
目前,我有一個計時器與OnTimedEvent跟蹤多少哈希通過每秒來無限,而(真)環保持哈希。一旦哈希開始,我的程序和定時器就會被凍結。
這樣做的正確方法是什麼?我怎樣才能保持散列(並輸出)而不會凍結?
提前致謝!
馬騰
此時一切除計時器Quiete酒店線性。
public partial class Form1 : Form
{
private int count;
private MD5 md5;
private byte[] hash;
private bool Calculate = false;
private System.Timers.Timer timer;
public Form1()
{
InitializeComponent();
count = 0;
PrepareFirstHash();
timer = new System.Timers.Timer(1000);
timer.Elapsed += OnTimedEvent;
timer.Enabled = true;
}
private void PrepareFirstHash()
{
md5 = MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes("start");
hash = md5.ComputeHash(inputBytes);
}
private void DoCalc()
{
hash = md5.ComputeHash(hash);
count++;
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
SetText(count.ToString());
count = 0;
}
delegate void SetTextCallback(string text);
private void SetText(string text)
{
if (this.label1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.label1.Text = text;
}
}
private void btnStart_Click(object sender, EventArgs e)
{
Calculate = true;
while (Calculate){
DoCalc();
}
}
private void btnStop_Click(object sender, EventArgs e)
{
Calculate = false;
}
}
}
聽起來像是'BackgroundWorker'工作。請參閱http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx – Vlad 2014-09-22 21:59:17
如果您只是計時一種方法,爲什麼不使用控制檯應用程序和'System.Diagnostics。 Stopwatch'? – 2014-09-22 22:04:06