运行一个使用主线程中的方法的单独线程是否仍然在主线程上运行它? (C#)

时间:2014-05-25 01:32:14

标签: c# wpf multithreading md5sum

我正在开展一个项目,要求我对md5校验和进行一些多任务处理。我创建了一个非常简单的方法来处理md5校验和,方法是创建一个新线程并使用一种允许我重用不同算法的方法。

这里是我新主题的代码:

private readonly Thread md5Check_ = new Thread(new ThreadStart(md5Check));

以下是该主题的处理程序:

private static void md5Check()
    {
        string config_integrity = GetChecksum(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "/file.txt", Algorithms.MD5,).ToLower();

    }

(这是用同一个MainWindow.xaml.cs文件编写的)以下是GetChecksum方法:

public static string GetChecksum(string fileName, HashAlgorithm algorithm)
    {
        if (File.Exists(fileName))
        {
            using (var stream = new BufferedStream(File.OpenRead(fileName), 100000))
            {
                return BitConverter.ToString(algorithm.ComputeHash(stream)).Replace("-", string.Empty);
            }
        }
        else 
        {
            return "error";
        }
    }

算法:

 public static class Algorithms
    {
        public static readonly HashAlgorithm MD5 = new MD5CryptoServiceProvider();
        public static readonly HashAlgorithm SHA1 = new SHA1Managed();
        public static readonly HashAlgorithm SHA256 = new SHA256Managed();
        public static readonly HashAlgorithm SHA384 = new SHA384Managed();
        public static readonly HashAlgorithm SHA512 = new SHA512Managed();
        public static readonly HashAlgorithm RIPEMD160 = new RIPEMD160Managed();
    } 

我想知道,因为新线程(md5Check_)在主线程上调用getChecksum方法,如果实际计算将在新线程(md5check)或主线程上计算,就好像文件是1GB或2GB我的应用程序可能会崩溃。

3 个答案:

答案 0 :(得分:1)

这将在新的单独线程上运行

答案 1 :(得分:1)

使用当前代码(假设您在某处调用md5Check_.Start()),您的代码将在您创建的线程上运行(md5Check _)。

答案 2 :(得分:1)

从线程调用的任何方法都将在调用线程上执行,除非您通过其他线程上的 Dispatcher(在WPF中)手动调度它。

同样在您的情况下,您可以使用GetChecksum()方法中的Thread.CurrentThread属性来验证自己,以查看它当前正在执行的线程。