C# 如何为具有多个参数的函数创建线程

C# 如何为具有多个参数的函数创建线程,c#,multithreading,C#,Multithreading,假设我有一个包含日志文件的目录。 我的程序必须创建3个带有一些统计信息的文本文件。 每个日志文件必须分别并行处理。但是我不明白如何为具有许多参数的函数创建线程。 主要功能有void WriteInFileUserStat(字符串文件名、字符串txt、字典dict)、void writeInfileDomainInstat(字符串文件名、字符串txt、字典dict)、void writeInfileDataStat(字符串文件名、字符串txt、字典dict) 类程序 { 静态vo

假设我有一个包含日志文件的目录。 我的程序必须创建3个带有一些统计信息的文本文件。

每个日志文件必须分别并行处理。但是我不明白如何为具有许多参数的函数创建线程。 主要功能有void WriteInFileUserStat(字符串文件名、字符串txt、字典dict)、void writeInfileDomainInstat(字符串文件名、字符串txt、字典dict)、void writeInfileDataStat(字符串文件名、字符串txt、字典dict)

类程序
{        
静态void Main(字符串[]参数)
{
string dirName=@“C:\MY DISK\Study\7th term\Сааааааааааааааааа;
string[]filelist=Directory.GetFiles(@“C:\MY DISK\Study\7th term\Сааааааааааааааааа107;
字符串[]fileliststat=Directory.GetFiles(@“C:\MY DISK\Study\7th term\Сааааааааааааааааа1072;
字符串userlog=@“C:\MY DISK\Study\7th term\Саааааааааааааааааа107;
字符串domainlog=@“C:\MY DISK\Study\7th term\Саааааааааааааааааа1072;
字符串datelog=@“C:\MY DISK\Study\7th term\Саааааааааааааааааа;
Dictionary userDict=新字典();
Dictionary domainDict=新字典();
Dictionary dateDict=新字典();
//线程userStatThread=新线程(新的参数化线程启动(WriteInFileUserStat));
//Start(s、userlog、userDict);
if(Directory.Exists(dirName))
{
控制台写入线(“Фааааааааааааааааа;
string[]files=Directory.GetFiles(dirName);
foreach(文件中的字符串s)
{
字符串fname=s;
控制台。写入线(s);
}
}
控制台写入线(“Сааааааазааааааааа;
foreach(文件列表中的字符串s)
{
WriteInFileUserStat(s、userlog、userDict);
}
foreach(userDict中的KeyValuePair-keyValue)
{
Console.WriteLine(keyValue.Key+“-”+keyValue.Value);
}
控制台写入线(“СаааааПаааааааааа;
foreach(文件列表中的字符串s)
{
WriteInfiledOMInstant(s、domainlog、domainDict);
}
foreach(域dict中的KeyValuePair keyValue)
{
Console.WriteLine(keyValue.Key+“-”+keyValue.Value);
}
控制台写入线(“СаааааПаааиаааааа;
foreach(文件列表中的字符串s)
{
WriteInFileDateStat(s、datelog、dateDict);
}
foreach(dateDict中的KeyValuePair keyValue)
{
Console.WriteLine(keyValue.Key+“-”+keyValue.Value);
}
Console.ReadLine();
}
/*Парсинг файла*/
公共静态无效文件解析(字符串行)
{
字符串用户名;
字符串域名;
串流量;
字符串日期;
string[]filelist=Directory.GetFiles(@“C:\MY DISK\Study\7th term\Сааааааааааааааааа107;
foreach(字符串文件\u到\u读入文件列表)
{
}
string[]parts=line.Split('\t');
用户名=零件[0];
域名=部分[1];
交通量=部分[2];
日期=零件[3];
WriteLine($“用户名={Username},域名={domainName},流量={Traffic},日期={Date}”);
}
/*Чтение из файла*/
静态公共void ReadingFile(字符串文件名)
{
使用(StreamReader sr=新StreamReader(文件名))
{
弦线;
而((line=sr.ReadLine())!=null)
{
文件解析(行);
}
}
}
/*Запись в файл статистики по пользователю*/
静态公共void WriteInFileUserStat(字符串文件名、字符串txt、字典dict)
{
字符串用户;
串流量;
int-trafficInt=0;
int tempValue=0;
使用(StreamWriter swr=新StreamWriter(txt))
{
使用(StreamReader sr=新StreamReader(文件名))
{
弦线;
而((line=sr.ReadLine())!=null)
{
string[]parts=line.Split('\t');
用户=零件[0];
交通量=部分[2];
if(dict.ContainsKey(用户))
{
tempValue=Convert.ToInt32(dict[user])+Convert.ToInt32(流量);
删除(用户);
trafficInt=转换为32(流量);
dict.Add(user,Convert.ToString(tempValue));
}
else dict.Add(用户、流量);
//swr.WriteLine(“{0}\t{1}”,用户,流量);
}
}
foreach(dict中的KeyValuePair KeyValue)
{
WriteLine(“{0}-{1}”,KeyValue.Key,KeyValue.Value);
}
swr.Close();
}
}
/*Запись в файл статистики по доменам*/
静态公共void writeInfileDomainInstat(字符串文件名、字符串txt、字典dict)
{
字符串域;
串流量;
int-trafficInt=0;
int tempValue=0;
使用(StreamWriter swr=新StreamWriter(txt))
    class Program
{        
    static void Main(string[] args)
    {
        string dirName = @"C:\MY DISK\Study\7th semester\Основы параллельной обработки данных\log";
        string[] filelist = Directory.GetFiles(@"C:\MY DISK\Study\7th semester\Основы параллельной обработки данных\log", "*.txt");
        string[] fileliststat = Directory.GetFiles(@"C:\MY DISK\Study\7th semester\Основы параллельной обработки данных\log\statistic", "*.txt");
        string userlog = @"C:\MY DISK\Study\7th semester\Основы параллельной обработки данных\log\statistic\userlog.txt";
        string domainlog = @"C:\MY DISK\Study\7th semester\Основы параллельной обработки данных\log\statistic\domainlog.txt";
        string datelog = @"C:\MY DISK\Study\7th semester\Основы параллельной обработки данных\log\statistic\datelog.txt";

        Dictionary<string, string> userDict = new Dictionary<string, string>();
        Dictionary<string, string> domainDict = new Dictionary<string, string>();
        Dictionary<string, string> dateDict = new Dictionary<string, string>();

        //Thread userStatThread = new Thread(new ParameterizedThreadStart(WriteInFileUserStat));
        //userStatThread.Start(s, userlog, userDict);
        if (Directory.Exists(dirName))
        {
            Console.WriteLine("Файлы с логами прокси-сервера:");
            string[] files = Directory.GetFiles(dirName);
            foreach (string s in files)
            {
                string fname = s;
                Console.WriteLine(s);
            }
        }
        Console.WriteLine("Статистика по пользователям: ");
        foreach(string s in filelist)
        {
            WriteInFileUserStat(s, userlog, userDict);
        }
        foreach (KeyValuePair<string, string> keyValue in userDict)
        {
            Console.WriteLine(keyValue.Key + " - " + keyValue.Value);
        }
        Console.WriteLine("Статистика по доменам: ");
        foreach (string s in filelist)
        {
            WriteInFileDomainStat(s, domainlog, domainDict);
        }
        foreach (KeyValuePair<string, string> keyValue in domainDict)
        {
            Console.WriteLine(keyValue.Key + " - " + keyValue.Value);
        }
        Console.WriteLine("Статистика по датам: ");
        foreach (string s in filelist)
        {
            WriteInFileDateStat(s, datelog, dateDict);
        }
        foreach (KeyValuePair<string, string> keyValue in dateDict)
        {
            Console.WriteLine(keyValue.Key + " - " + keyValue.Value);
        }
        Console.ReadLine();
    }

    /*Парсинг файла*/
   public static void FilesParsing(string line)
    {
        string userName;
        string domainName;
        string traffic;
        string date;
        string[] filelist = Directory.GetFiles(@"C:\MY DISK\Study\7th semester\Основы параллельной обработки данных\log", "*.txt");
        foreach (string file_to_read in filelist)
        {

        }
        string[] parts = line.Split('\t');
        userName = parts[0];
        domainName = parts[1];
        traffic = parts[2];
        date = parts[3];

        Console.WriteLine($"Username = {userName} , Domain name = {domainName}, Traffic = {traffic}, Date = {date}");
    }

    /*Чтение из файла*/
    static public void ReadingFile(string filename)
    {
        using (StreamReader sr = new StreamReader(filename))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                FilesParsing(line);
            }
        }
    }
    /*Запись в файл статистики по пользователю*/
    static public void WriteInFileUserStat(string filename,string txt, Dictionary<string, string> dict)
    {
        string user;
        string traffic;
        int trafficInt = 0;
        int tempValue = 0; 
        using (StreamWriter swr = new StreamWriter(txt))
        {
            using (StreamReader sr = new StreamReader(filename))
            {
                string line;

                while ((line = sr.ReadLine()) != null)
                {
                    string[] parts = line.Split('\t');
                    user = parts[0];
                    traffic = parts[2];
                    if (dict.ContainsKey(user))
                    {
                        tempValue = Convert.ToInt32(dict[user]) + Convert.ToInt32(traffic);
                        dict.Remove(user);
                        trafficInt = Convert.ToInt32(traffic);                                    
                        dict.Add(user, Convert.ToString(tempValue));

                    }
                    else dict.Add(user, traffic);

                    //swr.WriteLine("{0}\t{1}", user, traffic);
                }
            }
            foreach (KeyValuePair<string, string> KeyValue in dict)
            {
                swr.WriteLine("{0} - {1}", KeyValue.Key, KeyValue.Value);
            }
            swr.Close();
        }
    }

    /*Запись в файл статистики по доменам*/
    static public void WriteInFileDomainStat(string filename, string txt, Dictionary<string, string> dict)
    {
        string domain;
        string traffic;
        int trafficInt = 0;
        int tempValue = 0;
        using (StreamWriter swr = new StreamWriter(txt))
        {
            using (StreamReader sr = new StreamReader(filename))
            {
                string line;

                while ((line = sr.ReadLine()) != null)
                {
                    string[] parts = line.Split('\t');
                    domain = parts[1];
                    traffic = parts[2];
                    if (dict.ContainsKey(domain))
                    {
                        tempValue = Convert.ToInt32(dict[domain]) + Convert.ToInt32(traffic);
                        dict.Remove(domain);
                        trafficInt = Convert.ToInt32(traffic);
                        dict.Add(domain, Convert.ToString(tempValue));
                    }
                    else dict.Add(domain, traffic);

                    //swr.WriteLine("{0}\t{1}", domain, traffic);
                }
            }
            foreach (KeyValuePair<string, string> KeyValue in dict)
            {
                swr.WriteLine("{0} - {1}", KeyValue.Key, KeyValue.Value);
            }
            swr.Close();
        }
    }

    /*Запись в файл статистики по дате*/
    static public void WriteInFileDateStat(string filename, string txt, Dictionary<string, string> dict)
    {
        string date;
        string traffic;
        int trafficInt = 0;
        int tempValue = 0;
        using (StreamWriter swr = new StreamWriter(txt))
        {
            using (StreamReader sr = new StreamReader(filename))
            {
                string line;

                while ((line = sr.ReadLine()) != null)
                {
                    string[] parts = line.Split('\t');
                    date = parts[3];
                    traffic = parts[2];
                    if (dict.ContainsKey(date))
                    {
                        tempValue = Convert.ToInt32(dict[date]) + Convert.ToInt32(traffic);
                        dict.Remove(date);
                        trafficInt = Convert.ToInt32(traffic);
                        dict.Add(date, Convert.ToString(tempValue));
                    }
                    else dict.Add(date, traffic);

                    //swr.WriteLine("{0}\t{1}", date, traffic);
                }
            }
            foreach (KeyValuePair<string, string> KeyValue in dict)
            {
                swr.WriteLine("{0} - {1}", KeyValue.Key, KeyValue.Value);
            }
            swr.Close();
        }
    }

}