首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >主线程等待多个后台工作线程完成

主线程等待多个后台工作线程完成
EN

Stack Overflow用户
提问于 2014-03-06 23:30:55
回答 3查看 878关注 0票数 1

我产生了多个后台工作者线程,并希望我的主线程等到所有线程都完成。解决方案是在每次生成后台工作者线程时向列表中添加一项,然后在RunWorkerCompleted中删除它们。但是,如何将列表作为参数传递给RunWorkerCompleted?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FuncA()
{
 foreach()
 {
    /* add an item to the list */
   _bw.RunWorkerAsync();
 }
 m_event.WaitOne(); /* Main thread waits here */
}
static bw_DoWork()
{

}
static bw_RunWorkerCompleted()
{ 
    /* delete item from list */
    /* if list is empty signal m_event.Set() */
}
EN

回答 3

Stack Overflow用户

发布于 2014-03-06 23:39:23

await中使用第三方公共关系使这一点变得非常简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void someEventHandler()
{
    var results = await Task.WhenAll(
        Task.Run(() => ComputeSomeValue()),
        Task.Run(() => ComputeSomeOtherValue()),
        Task.Run(() => ComputeYetAnotherValue()));
    DoSomethingWithResults(results);
}

对于.NET 4.0解决方案,可以在不使用await的情况下使用任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void someEventHandler()
{
    Task.Factory.ContinueWhenAll(new[]{
        Task.Run(() => ComputeSomeValue()),
        Task.Run(() => ComputeSomeOtherValue()),
        Task.Run(() => ComputeYetAnotherValue())}
        , resultTask => DoSomethingWithResults(resultTask.Result);
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-07 05:32:19

在调用_bw.RunWorkerAsync()时,可以将列表作为参数传递。RunWorkerAsync方法有一个重载方法,它接受一种类型的对象作为参数。

您可以在bw_DoWork事件结束时而不是在bw_RunWorkerCompleted事件中从list中删除项。后者应该在更新某些UI元素时使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<object> list = new List<object>();
FuncA()
{
    foreach()
    {
        /* add an item to the list */
       _bw.RunWorkerAsync(list);
     }
    m_event.WaitOne(); /* Main thread waits here */
}
static bw_DoWork()
{
    // Do the stuff.

    /* delete item from list */
    var list = e.Argument as List<object>;
    /* if list is empty signal m_event.Set() */
}
票数 0
EN

Stack Overflow用户

发布于 2014-03-07 00:12:25

如果您使用的是.NET Framework4或更高版本,则可以使用System.Threading.CountdownEvent。在FuncA()中,在启动后台工作程序之前,您必须使用大量对象初始化信号,并且在WorkerCompleted处理程序中,您应该调用CountdownEvent的CountdownEvent ()方法。在线程中,您必须调用CountdownEvent的Wait()方法,然后在该方法之后调用所有代码,这些代码必须在稍后执行。

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

https://stackoverflow.com/questions/22238418

复制
相关文章
Div Scroll Bar (用层模拟滚动条)
对Div的盒模型以及Css控制定位都不熟,所以遇到了不少BT问题……好在最终突破了种种困难,基本实现了自己想要的效果。 说明: 最大的突破是通过了 xhtml1-transitional.dtd 验证,可以在xhtml文档里正常使用. 采用相对定位,使用起来更灵活,可以放在页面任何地方而不用改程序. 结构规范,容易扩展. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR
张善友
2018/01/19
1.4K0
div:给div加滚动条 div的滚动条设置
<div style=” overflow:scroll; width:400px; height:400px;”></div>
全栈程序员站长
2022/09/14
6.1K0
CSS深入理解学习笔记之overflow
1、Overflow基本属性   overflow:visible(默认)/hidden/scroll/auto/inherit;   visible:超出部分可见。   hidden:超出部分隐藏。   scroll:超出可滚动。   auto:若超出才出现滚动条。   inherit:继承。(IE8+)   注:overflow-x与overflow-y值不同,其中一个属性值被赋予visible,而另一个被赋值为hidden/scroll/auto,则visible会被重置为auto。 兼容性:   
就只是小茗
2018/03/07
4.2K0
CSS深入理解学习笔记之overflow
div垂直居中的几种方式_div垂直水平居中
利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可。本文收集了六种利用css进行元素的垂直居中的方法,每一种适用于不同的情况,在实际的使用过程中选择某一种方法即可。
全栈程序员站长
2022/08/03
4.1K0
div垂直居中的几种方式_div垂直水平居中
div在div中垂直居中水平居中(css如何让div水平居中)
最近写网页经常需要将div在屏幕中居中显示,遂记录下几个常用的方法,都比较简单。 水平居中直接加上<center>标签即可,或者设置margin:auto;当然也可以用下面的方法
全栈程序员站长
2022/08/01
15K0
div在div中垂直居中水平居中(css如何让div水平居中)
CSS第五天-定位
CSS第五天-定位 静态定位:static 定位的默认值,写边偏移也不会有效果 ---- 相对定位:relative 父元素搭配子绝父相使用 根据自身原来的位置,进行定位 没有脱标,在页面还占有位置 天生就是给绝对定位当爹用 ---- 绝对定位:absolute 根据最近带有定位(非静态)的祖先元素来定位 子绝父相 脱离标准流,在页面不占有位置 绝对定位,固定定位,浮动,可以直接设置宽度和高度,默认宽度是内容宽度 ---- 固定定位:fixed 永远根据浏览器可视区域定位,不会随着滚动条的滚动而滚动 可以
小城故事
2023/02/27
2.7K0
CSS第五天-定位
Day7:html和css
Day7:html和css 如果有浮动,会导致脱标,定位也能脱标,我们没有清除浮动,因为里面有子绝父相. 清除浮动的方法 额外标签法,在最后一个浮动元素后面添加一个空的标签代码: <div style="clear: both"></div> 使用after伪元素进行清除浮动. .clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { *
达达前端
2019/07/03
1.9K0
Day7:html和css
CSS杂谈
本文没有什么高深的东西,就是写几个CSS样式经常遇见的东西,可能大部分都已经知道怎么解决了,当做小白文浏览就好。
wade
2020/04/23
8000
div滚动条
overflower:auto(内容溢出的时候出现滚动条;scroll会一直出现滚动条)
全栈程序员站长
2022/09/07
2.5K0
div垂直居中 css div盒子上下垂直居中
div垂直居中 css div盒子上下垂直居中,让DIV盒子在任何浏览器中任何分辨率的显示屏浏览器中处于水平居中和上下垂直居中。 div垂直居中常用于单个盒子,如一个页面里只有一个登录布局,使用div css让这个登录布局水平和css垂直居中。 这里介绍一种最简单兼容性最好的水平居中与上下垂直居中的方法。 第一种方法:具体实例代码如下
李维亮
2021/07/09
2.8K0
scroll居中元素的 scrollleft 的计算方法
如果需要将某个元素 在可以滚动元素(scroll)中设置为居中计算方法为: 需要的scrollleft + 普通居中时候的offsetLeft = 当前的scrollleft+当前元素的offsetLeft = 固定的当前元素在整个滚动条中距离左边的位置
李维亮
2021/07/08
9250
纯CSS实现拖拽--resize、scale、包裹性
今天看了一篇关于 CSS 的文章,文章用到的几个点,想和大家聊聊。 附「原文地址」大家可自己查阅。
奋飛
2021/12/30
3K0
纯CSS实现拖拽--resize、scale、包裹性
纯CSS实现拖拽--resize、scale、包裹性
今天看了一篇关于 CSS 的文章,文章用到的几个点,想和大家聊聊。 附「原文地址」大家可自己查阅。
奋飛
2021/09/06
3.4K0
纯CSS实现拖拽--resize、scale、包裹性
html5div居中属性,html怎样让div居中
内容 ”标签让div居中;2、在div中加入“margin:0 auto属性;”自动调节居中。
全栈程序员站长
2022/11/15
4.5K0
html5div居中属性,html怎样让div居中
CSS自定义滚动条的样式
本文会介绍CSS滚动条选择器,并在演示中展示如何在Webkit的内核浏览器和IE浏览器中,自定义一个横向以及一个纵向的滚动条。
前端林子
2018/11/24
6.6K3
CSS自定义滚动条的样式
css的div垂直居中的方法,百分比div垂直居中
我们都知道,固定高宽的div在网页中垂直居中很简单,相信大家也很容易的写出来,但是不是固定高宽的div如何垂直居中呢?我们在网页布局,特别是手机等web端网页经常是不固定高宽的div,那么这些div如何垂直居中呢?这篇文章,我总结一下。
Dawnzhang
2019/02/27
2.7K0
css让div居中显示_css页面居中
给父级div设置相对定位,子元素div设置绝对定位,left、right、top、bottom都设置为0,然后将margin设置为auto即可实现。
全栈程序员站长
2022/11/17
9.5K0
css让div居中显示_css页面居中
CSS overflow 内容溢出时的显示方式
以前不知道 overflow 的滚动条样式是可以修改的,最近做的一个官网项目中前端提供的静态模板自定义了滚动条样式,才得知还有这么个东西,在此记录一下自定义滚动条的写法,这样可以更好的理解用法,虽然下次使用还要来这里看
很酷的站长
2022/12/16
2.3K0
CSS overflow 内容溢出时的显示方式
移动端导航简单实现
在移动端导航的功能太常见了,很多时候还需要可滑动,点击的时候还需要当前动画到中间。实现的方法很多,今天分享一个本人最近开发所用的方法。
wade
2020/04/24
7670
CSS vw让overflow:auto页面滚动条出现时不跳动
当前web届,绝大多数的页面间布局都是水平居中布局,主体定个宽度,然后margin: 0 auto的节奏~
山河木马
2019/03/05
4.4K1
CSS vw让overflow:auto页面滚动条出现时不跳动

相似问题

IE滚动条+ Overflow Scroll + div位于

21

Jquery - Check:如果可以滚动(div with overflow: scroll )

10

可变高度的div可以使用` `overflow: scroll`吗?

30

禁用Scroll on overflow-y: scroll div - Scroll Page

114

overflow y scroll on position fixed div显示双滚动条

367
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文