有没有办法等待通过asyncExec(...)提交到SWT UI线程的所有Runnables完成?
背景:
我有一个长时间运行的操作,其中包括触发事件,然后通过Display的asyncExec(...)实例方法将Runnables提交到SWT UI线程.
长时间运行操作的进度显示在ProgressMonitorDialog中,我想仅在UI线程完成Runnables后才关闭对话框.
将调用从asyncExec(...)更改为syncExec(...)不是一个选项,因为当从其他上下文触发事件时,不需要后者.
假设我有一个关于汽车销售的数据集,我正在构建显示图表的组件,这些图表显示了该数据的不同方面.
例如,一个组件可以显示汽车的平均销售价格,而另一个组件可以显示汽缸的数量与去年购买的汽车的里程数之间的关系.
这些组件还可以进一步参数化,以便它们仅显示在给定国家/地区购买的汽车的数据等.似乎使用道具来传递参数和数据似乎是合适的,因此这些组件可以像这样使用:
<MileageByCylinder country="US" year="2014" dataset={data} />
<AvgSellingPricesByYear country="US" dataset={data} />
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,我要说的是,我正在构建两个以不同方式组成这些组件的视图(页面).第一个将静态显示不同国家/地区的销售价格,而另一个将具有用于选择国家/地区的UI以及按柱面显示里程数.两个视图都需要以某种方式获取它们传递给图表组件的数据集.但是如何重新获取获取数据集的逻辑呢?
使用mixins,可以按如下方式完成:
var CarDataMixin = {
componentDidMount: {
// fetch car data and
// call this.setState({carData: fetchedData}),
// once data has been (asynchronously) fetched
}
}
var FirstView = React.createClass({
mixins: [CarDataMixin],
render: function() {
return (
<div>
<AvgSellingPricesByYear country="US" dataset={this.state.carData} />
<AvgSellingPricesByYear country="UK" dataset={this.state.carData} />
<AvgSellingPricesByYear country="FI" dataset={this.state.carData} />
</div>
)
}
})
var SecondView = React.createClass({
mixins: [CarDataMixin],
handleNewCountry: function(country) {
this.state{country: country}
},
render: function() …Run Code Online (Sandbox Code Playgroud)