- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个方法:
func stepThree() {
operation = "prDatas"
let entries = self.data.componentsSeparatedByString("|***|")
total = entries.count
for entry in entries {
++current
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
self.registerDB(entry)
})
}
status.setProgress(Float(current/total), animated: true)
finishAll()
}
我想执行registerDB
函数并在完成后更新我的进度条。我测试了几种方法但从未成功
编辑 1
实现@Russell 命题,工作完美,但在dispatch_async block 内计算值总是结果为0
操作和多线程有问题吗?
方法:
func stepThree() {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
var current = 0
var total = 0
self.operation = "prDatas"
let entries = self.data.componentsSeparatedByString("|***|")
total = entries.count
for entry in entries {
++current
self.registerDB(entry)
dispatch_async(dispatch_get_main_queue(), {
print("value of 'current' is :" + String(current))
print("value of 'total' is :" + String(total))
print("Result is : " + String(Float(current/total)))
self.updateV(Float(current/total))
})
}
})
}
控制台输出:
value of 'current' is :71
value of 'total' is :1328
Result is : 0.0
最佳答案
您的代码将立即更新状态栏 - 因此作业不会完成。
您需要移动更新,以便它实际上遵循 registerDB
函数,然后您必须在主线程上进行调用。这是一个示例 - 使用虚拟函数而不是函数调用,以便我可以确保它按预期工作
func stepThree()
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let total = 5 // test data for demo
for entry in 0...total
{
// dummy function - just pause
sleep(1)
//self.registerDB(entry)
// make UI update on main queue
dispatch_async(dispatch_get_main_queue(),
{
self.setProgress(Float(entry)/Float(total))
})
}
})
}
func setProgress(progress : Float)
{
progressView.progress = progress
lblProgress.text = String(format: "%0.2f", progress)
}
关于ios - 无法在后台执行操作并在 mainThread 中更新 progressView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553521/
我很好奇为什么下面是内存泄漏,因为 mHandler 是在 mainThread 上创建的,现在当调用 onDestroy 时它不会杀死线程吗? Activity 被销毁后,处理程序如何存在?我还没有
我有一个方法: /** * Call event without a value */ @MainThread public void call() { setValue(null); }
我有一个在后台运行的函数,完成后它会在主线程中更新 UI。我注意到当代码到达对主线程的调用时单元测试失败。我该如何纠正这个问题? 例如注意:long 描述了项目中的伪逻辑,不是确切的代码 在主代码中:
我正在考虑如何将结果数据从某个工作线程传回客户端而不进行复制。 Worker 住在其他线程中,而 BigData 继承了 QObject。我的想法是改变数据的所有权: class Worker: pu
当大多数用例都用作后台线程时,viewModelScope 默认为 MainThread 的原因是什么? 在我的项目中,我仍然想不出一个需要在 ViewModel 中使用主线程的示例。 另外,有没有比
在通过代码呈现新的 UIViewController 之后,在每个地方(在 viewModel 或 viewController 中)使用 .Drive,我得到这个错误:drive* 系列方法只能从
我正在尝试将图像放入 cell.image 中。如果图像已经加载(因此,在缓存中),我会这样做。否则,我会使用 sendAsynchronousRequest 在后台下载它。 这是我的代码: var
我有这个方法: func stepThree() { operation = "prDatas" let entries = self.data.componentsSeparated
我有一个带有名为 MainForm 的窗体的 winform。我有一个名为 ObjMgr 的静态类。在 ObjMg 中,我还有其他几个静态类、值,但现在不重要。 在 ObjMgr 类中,我还有一个 s
好的,我们实现了一个 MVP 层,很好地展示并使用 RxJava 和 RxAndroid。我们拍了this作为例子并以此为基础。 当 Presenter 被调用开始执行时,它会向 Model Inte
我有 UITableView,其中包含一些内容,这些内容以异步 方式加载。当用户旋转设备时,我需要在 -willRotateToInterfaceOrientation 方法中制作 [tableVie
这个问题在这里已经有了答案: How can I fix 'android.os.NetworkOnMainThreadException'? (66 个答案) NetWork On main th
我有一个运行在 Linux 服务器上的多线程 Python 应用程序。我可以使用 PyDev 的 Debug Server 远程调试进去,这似乎是一个非常有值(value)的调试资源。然而,我发现有一
如何在后台线程中执行此代码? .subscribeOn(Schedulers.computation()) onNext() { touchEverythingInTheUiThreadFr
我找到了大量关于如何在 UI 线程上调用函数的资源,但我有一些逻辑只允许从主线程运行。有没有办法在主线程上获取调度程序并对其进行调用? 最佳答案 “调度程序”是特定于特定 UI 框架(此处:WPF)的
我尝试以相同的 X 和 Y 步顺序将 JLabel 从位置 A 移动到位置 B。该方法工作正常,但没有更新我的 gui。我在下面向您展示我的代码: 当我不调用 .join() 方法时,代码可以工作,但
我正在尝试使用 Volley 库获取数据以在 Andriod 应用程序中形成服务器。当我请求获取数据时我的数据太大但问题是 Volley 超时错误我也使用了RetryPolicy但问题是一样的。我该如
我有一个 while 语句在后台运行。 - (IBAction)startButton { [self performSelectorInBackground:@selector(Counter)
RxJava 中是否有一个 Scheduler api 与 RxAndroid 中的 AndroidSchedulers.mainThread() 同义。因此,如果我在新线程上安排任务并想在 Java
我正在查看一些旧代码,并看到以下 if 语句: if ([NSThread currentThread] != [NSThread mainThread]) 我偷偷怀疑这和 if (![[NSThre
我是一名优秀的程序员,十分优秀!