2014-09-22 28 views
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; 
    } 
} 

}

+0

聽起來像是'BackgroundWorker'工作。請參閱http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx – Vlad 2014-09-22 21:59:17

+0

如果您只是計時一種方法,爲什麼不使用控制檯應用程序和'System.Diagnostics。 Stopwatch'? – 2014-09-22 22:04:06

回答