首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#多线程控制台应用程序-控制台在线程完成之前退出

C#多线程控制台应用程序-控制台在线程完成之前退出
EN

Stack Overflow用户
提问于 2011-10-14 02:52:42
回答 6查看 25.3K关注 0票数 8

我有一个c#控制台应用程序,可以创建多达5个线程。

线程执行得很好,但UI线程在完成其工作时关闭。

有没有办法让主UI线程保持运行,只要辅助线程在运行?

代码语言:javascript
复制
foreach (var url in urls)
{
    Console.WriteLine("starting thread: " + url); 
    ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(myMethod), url);
}

我按照上面的代码开始我的线程。

EN

回答 6

Stack Overflow用户

发布于 2011-10-14 03:01:28

ThreadPool中的线程是后台线程,这意味着正在退出的应用程序不会等待它们完成。

您有几个选项:

例如,

  • 使用信号量
  • 等待计数器使用
  • (),非常粗糙,但对于一个简单的控制台应用程序来说还可以。
  • 使用TPL、Parallel.ForEach(urls, url => MyMethod(url));
票数 9
EN

Stack Overflow用户

发布于 2011-10-14 02:57:26

如果您使用的是.NET 4.0:

代码语言:javascript
复制
var tasks = new List<Task>();

foreach(var url in urls)
{
    tasks.Add(Task.Factory.StartNew(myMethod, url));
}

// do other stuff...

// On shutdown, give yourself X number of seconds to wait for them to complete...
Task.WaitAll(tasks.ToArray(), TimeSpan.FromSeconds(30));
票数 7
EN

Stack Overflow用户

发布于 2011-10-14 02:57:56

啊- ThreadPool是背景。它是排队的,但是然后你的程序结束了。完成了。程序终止。

读取信号量(WaitSignal)并等待-当所有线程都发出信号表示主线程可以继续时,回调中的线程在结束信号时结束。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7759001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档