2015-05-20 26 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如何从代码中调用它。哦,等等......你不知道他们的调用代码是什么样的?糟糕! –

相关问题