2015-05-20 15 views
5

Bazı dosyaları okuyan ve SHA1Managed hash'leri al ve sonra bir listeden diğer karmaları ile karşılaştıran bir yöntem var, bu yöntemi diğer iş parçacığı üzerinde nasıl yapabilirim? Bu kodlarlaC# diğer yöntemde yürütme yöntemi

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

Diğer iş parçacığı nerede? – Krease

+0

Belki de bu gönderiye göre bir temsilci kullanabilirsiniz: http://stackoverflow.com/questions/811224/how-to-create-a-thread – rivanov

+0

Beni anladınız galiba çocuklar, koşacak bir yola ihtiyacım var Bu yöntem async! Şu anda, kullanıcı arayüzümü engelliyor! – MozzieMD

cevap

4

sadece gerçekte işlevi sonuç döndürür beri kadar bir seviye görev oluşturma taşımak gerekir ediyorum bir arka plan iş parçacığı çalıştırmak istiyorsanız. Çağıran kodun böyle bir şeye nasıl çalıştığına bağlı olarak sizin için işe yarayabilir.

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

Teşekkürler, çalışmayı başardı! – MozzieMD

0

Dene:

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

Sadece bu kodları .NET Framework 4.5 veya daha sonraki sürümlerinde çalıştırmanız gerektiğini bilmelisiniz. Ve eğer .NET v4.0'ı kullanmak istiyorsanız, Görev'i yalnızca uyumsuz olarak kullanmalısınız. [Referanslar] (https://msdn.microsoft.com/en-us/library/hh191443.aspx) – Behzad

+0

'Run()' yönteminin type parametresini belirtmeniz gerekmez. Ve OP'nin koduyla nasıl çağırması gerektiğini göstermedikçe, bu cevap pek işe yaramıyor. Oh, bekle ... arama kodlarının neye benzediğini bilmiyor musun? Hata. –

İlgili konular