在其他线程上执行C#方法

5

我有一个方法,它读取一些文件并获取SHA1Managed哈希值,然后将其与列表中的其他哈希值进行比较。如何在其他线程上执行此方法?

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;

    }

其他线程在哪里? - Krease
也许你可以按照这篇文章使用委托:https://dev59.com/cnRA5IYBdhLWcg3w0xjk - rivanov
我觉得你们没有理解我的意思,我需要一种异步运行这个方法的方式!现在,它正在阻塞我的用户界面! - MozzieMD
可能有十几种不同的方式可以在除当前线程以外的线程上运行某些代码。而且在 Stack Overflow 上关于这个主题可能已经有成千上万的相关帖子了。请做一些研究,确定您想要使用的技术,并且如果您在使用该技术时遇到问题,请发布一个具体的问题。 - Peter Duniho
@PeterDuniho 我尝试了很多方法,但都没成功,所以来这里求助了! - MozzieMD
2
如果你尝试了其中的任何一种,你需要“展示你的工作”。不要让人们从头开始,试图猜测已经尝试过但没有成功的方法。包括一个好的、最小化的、完整的代码示例(http://stackoverflow.com/help/mcve),清楚地显示你尝试了什么,并详细解释该代码的功能及与你想要实现的目标有何不同。 - Peter Duniho
2个回答

4
如果你只想在后台线程中运行它,实际上需要将任务创建移动到更高一级,因为你的函数返回结果。根据调用代码的工作方式,以下类似代码可能适合你。
var backgroundTask = Task.Factory.StartNew(() =>
{
    var result = CheckFile("file", "filehash");
    //do something with the result
});

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 的话,应该只使用无异步的 Task。参考资料 - Behzad
您不需要指定Run()方法的类型参数。除非您演示OP应该如何从其代码中调用它,否则此答案并不是很有用。哦,等等...您不知道他们的调用代码长什么样?糟糕。 - Peter Duniho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接