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