问题标签 [ui-thread]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 在显示加载对话框后/同时更新当前活动视图
我有一个应用程序流程不同于 Android 标准的应用程序:
标准:在活动 A 上按下按钮并在加载数据并构建活动 B 的视图时显示此活动的加载,然后才显示下一个活动。 (在活动 A 上调用 AsyncTask,完成发送数据并调用活动 B)
我需要什么:按下活动 A 上的按钮,转到活动 B,在显示加载时,更新加载后活动 B 的视图。 (从活动 A 移动到 B 并在显示加载时调用 AsyncTask。当 AsyncTask 完成后,在加载在前面时更新视图,从而显示视图更新过程)
问题:这将使加载图标停止。有时会显示无响应的对话框(由于操作时间较长)并使用 UI 线程更改正在构建的视图。
我读过一些关于同一问题的问题:Android:如何动态更新 UI?
但没有人提供一个通用的答案。
如果你的回答是“这不是推荐的行为”,我会同意......但这些是要求,所以我真的很感激一些帮助:-D
android - 进度条微调器不显示
我对进度条微调器有疑问:
这在用户单击登录时执行。Spin 是一个全局进度条变量。下面是用于处理微调器的 Async 类。
问题:如果我尝试写
登录授权后,微调器根本不会显示。但是,如果我删除 ProgressBar.Gone 部分,则会显示微调器。但是,如果该部分存在,则似乎应用程序在继续之前“挂起”(登录用户或显示错误消息,告知用户名或密码错误)。
问题可能是什么?
我确信登录没有那么快,以至于微调器在设置为 GONE 之前没有时间显示。
c# - 为什么我没有为表单中的所有成员获得“跨线程操作无效”?
我在一个成员中得到一个“无效的跨线程操作”,但在另一个成员中却没有,它们都属于同一个表单,我相信是同一个 UI 线程。这些成员是uxServerGroup
和uxServerListen
。当我更改它上面的文本时,uxServerGroup.ValuesSecondary.Heading
它工作正常,我没有得到一个跨线程异常。但是当我尝试启用uxServerListen
按钮时,我确实得到了一个。为什么?
我可能应该注意到,这两个组件都属于 Krypton Toolkit,它们不是标准的 Windows 窗体。
这是我拥有的代码示例:
MainForm.cs:
SomeClass.cs:
类处理程序.cs:
经过大量搜索,我最终将其修复为:
作为一个额外的问题,有人可以解释一下(里面的东西MethodInvoker
):
c# - 从 C# 中的线程更新 UI 的其他方法
我的应用程序严重依赖线程来执行非常大的数据的复杂处理。UI 需要在处理完成时更新。我知道并尝试使用BackgroundWorker's
OnProgressChanged
和RunWorkerCompleted
方法来更新 UI。也使用Invoke
UI 线程的方法来更新。在 Win XP 32 位和 64 位操作系统上似乎一切正常。在 Win Vista 和 Win 7(32 位和 64 位)上,应用程序在使用Invoke
方法更新 UI 时随机挂起。
Invoke
不同 Win OS 上的行为是否会发生变化?除了从线程更新 UI 的其他方法是什么Invoke
?
谢谢
android - 在android中更新ui线程的最佳方法
我有一个逐帧播放视频的应用程序。这一切都在工作。但是查看性能问题并运行 traceview 我注意到有很多调用发送消息,这使用了大量的 cpu 时间。
当我查看我的应用程序时,我正在使用处理程序向 ui 发布回调以显示当前帧号。当我删除它时,traceview 中的所有 dispatchMessage 调用都消失了。
所以我的问题是,什么是从工作线程更新 ui 而不会经历这么多开销的最佳方法?
**注意,此呼叫大约每秒进行 30 次。
android - 无法与 UI 线程通信
我为 android 制作了一个简单的 RPC 机制应用程序,我遇到了一个问题,我无法从 RPC 类返回 UI 线程。
基本上我有 3 个类(ServerActivity、ServerView 和 ServiceImplementation),我创建了 3 个类,因为我使用 RPC 和 Protocol Buffer 进行绘图。
服务器活动:
服务实现:
我无法访问我的 UI 线程。有人知道为什么吗?
谢谢,罗伯特
android - 当我显示 Game Over Dialog 时,我收到一个错误“无法在线程内创建处理程序没有调用 Looper.prepare()”
我正在为 Android 编写一个小游戏。游戏是使用线程在 SurfaceView 上绘制的。在 Thread 的 run() 方法中,我测试游戏是否结束,如果是,我尝试显示游戏结束对话框,但是这给了我前面提到的错误消息。我知道当非 UI 线程试图弄乱 UI 时会发生此错误。我想知道的是显示这样一个对话框的最佳方法。我已经粘贴了下面的代码。谢谢你的帮助:
c# - 在 WP7 中解码背景中的 jpg
我在市场上有很多应用程序,到目前为止,我已经能够通过更改我的功能或加倍努力来解决无法将背景中的 jpg 解码为 WriteableBitmap 的问题。
我发现一种情况,我想不出“解决”这个问题的好方法。我需要解码从 MediaLibrary 获得的图像,将其分辨率降低到可管理的值 (800x800),旋转它并保存到本地存储。到目前为止,花费最多时间 (80%) 的事情是将位图解码为 800x800 - 它需要 700 毫秒到 1000 毫秒。用户在开始时可能会添加 7-10 张图像,这意味着等待添加图像的时间约为 10 秒。
我尝试懒惰地这样做,但在某些时候你需要付钱给吹笛者,并且应用程序在那时基本上会卡顿约 1000 毫秒,而且体验不是很好。
以某种方式在后台加载图像是否有我缺少的替代方法?
(请注意为什么 CreateOptions.BackgroundCreation 对我没有好处:它将图像加载到 BitmapImage 中,如果您只想使用它,这很好,但对于我需要做的就是在独立存储中创建副本来说不是很好) .
c# - 尽管 NotifyPropertyChanged 工作正常,但 ProgressBar 未在屏幕上更新
首先,抱歉问题的长度。
我正在更新一个 Silverlight for Windows Phone 7 应用程序,该应用程序当前将数据存储在多个 XML 文件中。我正在更新应用程序以使用 CompactSQL 数据库,并且在安装新版本后首次运行时,我必须将数据从 XML 文件迁移到数据库中。
我想要一个进度条(IsIndeterminate=false)向用户显示每个文件迁移到数据库的进度(因为该操作最多需要 2 分钟)。
问题在于,尽管 NotifyProperyChanged 事件触发并正确更新了进度条的值,但进度条并未在屏幕上更新(甚至显示)。当我在 XAML 中设置值时,它看起来很好(静态 - 但至少它是在屏幕上绘制的)。
我不知道为什么进度条根本没有出现在设备上。
我的 INotifyChanged 设置
在 Loaded 而不是 OnNavigatedTo 中调用 MigrateDB 方法,因为操作系统会终止任何加载时间过长的应用程序。
此操作需要很长时间。每分钟大约 100 个 XML 文件,我希望用户拥有 30 到 300 个文件。
c# - 在 C# 中传输数据包时如何正确保持 UI 更新?
我有这种形式,它产生一个新线程并开始在循环中侦听和等待 UDP 数据包。我需要的是使用接收到的字节数来更新 UI。
为此,我设置了一个事件,我将在收到数据包后立即引发,并将接收到的字节数作为参数传递。由于我没有在 UI 线程上运行,因此我不能简单地直接更新 UI。这是我目前正在做的事情:
但这仍然与数据包接收循环在同一线程上运行,并且它不会返回到该循环 - 并等待另一个数据包 - 直到此EVENTHANDLER_UpdateTransferProgress
方法返回。
我的问题基本上是关于上述方法中的以下行:
像这样更新 UI 会减慢数据包的接收速度。如果我把那条线去掉(或评论它),数据包接收会快得多。
我怎么可能解决这个问题?我认为更多线程是关键,但我不确定如何在这种情况下正确实现它们......我正在使用带有 .NET 2.0 的 Windows 窗体。
编辑:
在我之前的测试中,以上似乎是正确的,实际上可能在某种程度上是正确的。但经过更多测试后,我意识到问题出在整体上Invoke(new MethodInvoker(() => { ... }));
。当我删除它(当然 UI 不会更新)并离开EVENTHANDLER_UpdateTransferProgress
但继续引发事件时,数据包接收会快得多。
我测试了接收一些平均大约 1.5 秒的文件,而根本没有调用Invoke()
事件处理程序。当我确实调用Invoke()
事件处理程序时,即使没有更新 UI 中的任何控件或执行任何操作(换句话说,匿名方法体是空的),它也需要更长的时间,大约 5.5 秒。你可以看到这是一个很大的不同。
有没有办法改善这一点?