C# C语言中的多线程#
我有一个c#windows窗体应用程序。现在它在单线程中运行良好。 下面是我如何通过点击按钮启动它C# C语言中的多线程#,c#,multithreading,C#,Multithreading,我有一个c#windows窗体应用程序。现在它在单线程中运行良好。 下面是我如何通过点击按钮启动它 botThread = new Thread(new ThreadStart(mainThread)); botThread.Start(); 因此,一个线程被启动 用户将在文本框中指定一次要运行的线程数作为编号。 所以我希望启动多个线程,每个线程都应该从文本文件中获取一行。因此,如果线程是第一个,它应该得到文本文件的第一行 如果用户指定了两个线程,那么一旦线程的第一个实例结束执行任务或者它有任
botThread = new Thread(new ThreadStart(mainThread));
botThread.Start();
因此,一个线程被启动
用户将在文本框中指定一次要运行的线程数作为编号。
所以我希望启动多个线程,每个线程都应该从文本文件中获取一行。因此,如果线程是第一个,它应该得到文本文件的第一行
如果用户指定了两个线程,那么一旦线程的第一个实例结束执行任务或者它有任何期望,我希望bot移动到下一个实例,并使用文本文件的第三行启动一个新线程
我不知道该怎么办。我尝试使用for循环,但我无法跟踪线程,也无法在一个线程结束时启动新线程
编辑:
以下是循环代码:
int j = int.Parse(settings_textbox_instances.Text);
for (i = 0; i < j; i++)
{
botThread = new Thread(new ThreadStart(mainThread));
botThread.Start();
}
int j=int.Parse(设置\u文本框\u实例.Text);
对于(i=0;i
编辑1:
我已经使用了代码并制作了这个
private void multiThreader(int instances)
{
for (i = 0; i < instances; i++)
{
botThread = new Thread(new ThreadStart(mainThread));
string text = this.users_List[this.i];
botThread.Start();
threadcount++;
MessageBox.Show(i.ToString());
}
}
private void多线程(int实例)
{
对于(i=0;i
因此,当结束线程时,我可以调用void来创建新实例。但是有人能告诉我如何将文本的值从这里传输到线程吗?您可以在代码中使用此函数来查看何时启动另一个线程:
//return true if the thread is alive else false
botThread.IsAlive
int j = int.Parse(settings_textbox_instances.Text);
for (i = 0; i < j; i++)
{
botThread = new Thread(new ThreadStart(mainThread));
botThread.Start();
while (botThread.IsAlive)
{}
botThread2 = new Thread(new ThreadStart(mainThread));
botThread2.Start();
}
//如果线程处于活动状态,则返回true,否则返回false
botThread.IsAlive
int j=int.Parse(设置\文本框\实例.Text);
对于(i=0;i
您真的需要允许用户管理线程数吗
您可以让框架处理细节并使用
下面是一个简单的用法示例
static void Main()
{
var lines = System.IO.File.ReadAllLines(@"c:\temp\log.txt");
Parallel.ForEach(lines,line => processLine(line));
}
private static void processLine(string line)
{
Console.WriteLine(line);
}
除了上面链接的TPL文档之外,我强烈建议您阅读,以便更深入地理解这些概念。您可以使用Parallel.ForEach
var l = new List<string>();
using (var fs = new FileStream("", FileMode.Open, FileAccess.Read))
{
using (var sr = new StreamReader(fs))
{
string line;
while ((line = sr.ReadLine()) != null)
{
l.Add(line);
}
}
}
Parallel.ForEach(l, new ParallelOptions {MaxDegreeOfParallelism = 10}, line => Console.WriteLine(line));
其中MaxDegreeOfParallelism将是文本框提供的数字。是的,然后发布循环将其添加到我的第一篇文章中。请检查它,根据您的问题,您希望按顺序多任务处理应用程序。如果都是同步的,为什么要执行多线程?按上下文顺序多任务处理是不可能的。如果你想多任务处理,你可以并行处理任务。不连续(即一个接一个)。它不是控制台。我这里的主要问题是在控制台上多次启动线程。writeline只在那里有一个操作,您可以指定您自己的操作,无论需要对字符串执行什么处理。。。查看我的编辑。由于前一个进程处于活动状态,他将不会转到下一个进程。while循环确保进程仍然处于活动状态。您可以使用全局变量并放置文本行。当您完成处理时,您将从下一行开始。我提出了一个想法并更新了我的问题。你能帮我说一下如何将文本从我的功能转移到线程吗?对不起,我不知道第二部分的问题,但之前已经问过了,请参阅。
Parallel.ForEach(l, new ParallelOptions {MaxDegreeOfParallelism = 10}, MyAction);
private void MyAction(string s)
{
throw new NotImplementedException();
}