我想看一个函数运行多长时间.所以我在表单上添加了一个计时器对象,我出来了这段代码:
private int counter = 0;
// Inside button click I have:
timer = new Timer();
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
Result result = new Result();
result = new GeneticAlgorithms().TabuSearch(parametersTabu, functia);
timer.Stop();
Run Code Online (Sandbox Code Playgroud)
和:
private void timer_Tick(object sender, EventArgs e)
{
counter++;
btnTabuSearch.Text = counter.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但这并不算什么.为什么?
什么是使主线程等到所有线程完成的最佳方法?
for(int i=0;i<n;i++){
Thread t=new Thread();
t.start();
}
//wait for all threads to finish
我有一个主线程产生大约20个工作线程.
我需要停止主线程,直到所有其他线程都完成.
我知道(线程).Join.但这只适用于一个线程.
多个联接伤害了这样的表现.
t1.Join()
t2.Join()
...
t20.Join()
当程序一个接一个地等待每个人停下来.
我如何使主线程等待所有一组线程结束?
可能重复:
C#:等待所有线程完成
我有一个控制台应用程序产生一些线程,然后退出.每个线程大约需要20秒才能完成.似乎控制台应用程序正在生成线程,然后在线程有机会完成之前退出.
如何告诉控制台应用程序在它生成的所有线程完成之前不要退出?
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 15; i++)
{
Thread nova = new Thread(Method);
nova.Start();
}
listBox1.Items.Add("Some text");
}
private void Method()
{
for (int i = 0; i < 15; i++)
{
Console.WriteLine(i);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码写的:有些文字然后是数字111222333 .....我想它写的是111122223333 ....然后在最后一些文字.有可能用线程(父线程等待子线程)吗?还是我必须使用别的东西?
我有一个线程数组,我想加入它们所有的超时(即看看它们是否都在一定的超时内完成).我正在寻找等同于WaitForMultipleObjects的东西或者将线程句柄传递给WaitHandle.WaitAll的方法,但我似乎无法在BCL中找到任何我想要的东西.
我当然可以遍历所有线程(见下文),但这意味着整个函数可能需要超时*threads.Count才能返回.
private Thread[] threads;
public bool HaveAllThreadsFinished(Timespan timeout)
{
foreach (var thread in threads)
{
if (!thread.Join(timeout))
{
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)