2015-05-20 33 views
5

我有一個方法,讀取一些文件並獲得散列SHA1Managed,然後將其與列表中的其他散列進行比較,如何在其他線程上執行此方法?在其他線程的C#執行方法

public bool CheckFile(string file, string filehash) 
    { 

      if (File.Exists(file)) 
      { 

       using (FileStream stream = File.OpenRead(file)) 
       { 
        SHA1Managed sha = new SHA1Managed(); 
        byte[] checksum = sha.ComputeHash(stream); 
        string sendCheckSum = BitConverter.ToString(checksum) 
         .Replace("-", string.Empty); 

        return sendCheckSum.ToLower() == filehash; 
       } 
      } 
      else return false; 

    } 
+0

另一個線程在哪裏? – Krease

+0

也許你可以使用這個職位的委託:http://stackoverflow.com/questions/811224/how-to-create-a-thread – rivanov

+0

我不認爲你瞭解我的傢伙,我需要一種方式來運行這種方法異步!現在,它阻止了我的用戶界面! – MozzieMD

回答

4

如果你只是想在你真正需要的,因爲你的函數返回一個結果給了移動任務創建一個水平後臺線程運行。根據調用代碼的工作原理,這可能適用於您。

var backgroundTask = Task.Factory.StartNew(() => 
{ 
    var result = CheckFile("file", "filehash"); 
    //do something with the result 
}); 
+0

謝謝,管理它的工作! – MozzieMD

0

試圖通過這個代碼:

public async Task<bool> CheckFile(string file, string filehash) 
{ 
    await Task.Run<bool>(()=> { 
     if (File.Exists(file)) 
     { 

      using (FileStream stream = File.OpenRead(file)) 
      { 
       SHA1Managed sha = new SHA1Managed(); 
       byte[] checksum = sha.ComputeHash(stream); 
       string sendCheckSum = BitConverter.ToString(checksum) 
        .Replace("-", string.Empty); 

       return sendCheckSum.ToLower() == filehash; 
      } 
     } 
     else return false; 
    }); 
} 
+2

只要你必須知道這個代碼運行在.NET Framework 4.5或更高版本,如果你想使用.NET V4.0,那麼你應該使用任務而不僅僅是異步。 [參考](https://msdn.microsoft.com/en-us/library/hh191443.aspx) – Behzad

+0

您不需要指定'Run()'方法的類型參數。這個答案不是很有用,除非你演示OP如何從代碼中調用它。哦,等等......你不知道他們的調用代碼是什麼樣的?糟糕! –

相關問題