问题标签 [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.

0 投票
3 回答
10598 浏览

wpf - 在长时间运行操作之前强制重绘

当您有一个按钮时,请执行以下操作:

然后按钮不会变灰,因为长操作会阻止 UI 线程重新绘制控件。我知道正确的设计是启动后台线程/调度程序,但有时这对于简单的操作来说太麻烦了。

那么如何强制按钮在禁用状态下重绘呢?我在 Button 上尝试了 .UpdateLayout() ,但没有任何效果。我还尝试了 System.Windows.Forms.DoEvents(),它在使用 WinForms 时通常可以工作,但它也没有效果。

0 投票
3 回答
5259 浏览

android - doInBackground 调用 AsyncTask 然后休眠阻塞 UI 线程

我有一个活动,由 AsyncTask 组成,旨在在用户单击按钮时启动请求。我一直在寻找答案,但我没有发现同样的问题,或者对我来说不一样。代码正在做我想做的事,但是 ProgressDialog 看起来被阻塞了,因为微调器有时(几乎一直)没有转动。

当我点击按钮时:

AsyncTask 已启动 -> showDialog() 被调用 onPreExecute -> startSearch (SearchManager 启动一个新的 AsyncTask,在 doInBackground 中有大量网络调用)-> doInBackground 在 Activity 等待 SearchManager 被加载 -> 显示。

按钮代码:

搜索活动中的 AsyncTask 代码:

SearchManagerAsyncTask 的代码:由 startSearch 直接启动

我显然做错了什么,但找不到什么以及如何避免这种情况。谢谢你的帮助 !

解决方案 :

最后,似乎没有旋转 ProgressDialog 是因为我使用了相同的 ProgressDialog 实例和

与原因问题一起使用,我改为

现在它工作正常。

谢谢大家,希望有一天它可以帮助某人!

0 投票
2 回答
576 浏览

c# - 可以在另一个线程上的 Win32 Dll 中使用 C# 面板的 HWND 吗?

我有一些工作,但我不确定它是否正常,以及它是否会在以后引起问题。

我有一个 Win32 C++ 应用程序,它进行一些视频处理并使用 Direct3D 进行显示(不是我的代码)。我的任务是用 C# GUI 替换 GUI。

我已经将 C++ 代码变成了一个 dll。我在 C# 中创建了一个 GUI,并有一个用于视频显示的面板。我将此面板的 HWND 传递给 dll,一切似乎都运行良好。

但是 - 该面板正在被创建它的线程以外的线程访问,这是不应该做的。
我的一部分想要“独自离开”,但这感觉不对,我怀疑这会导致问题。例如,当我们想要在面板上捕获点击事件时,这将在主线程或 UI 线程上......创建面板。

关于我应该如何做到这一点的任何建议?谢谢谢谢

0 投票
1 回答
778 浏览

c# - 获取当前线程中所有窗口的列表

我正在我的 WPF 应用程序中启动一个新的 UI 线程。现在我正在寻找一种方法来获取该线程中所有窗口的列表 - 就像我将为主线程获取它一样System.Windows.Application.Current.Windows。.NET-Framework 中有什么东西还是我必须自己实现它?当我必须自己实现它时,也许有人有一点示例代码?

0 投票
2 回答
3470 浏览

android - 从 iOS 中的 ([self performSelectorOnMainThread]) 等非活动对象访问 UI-Thread

我已经从 iOS 应用程序开发转移到了 android,所以我在寻找一些我以前使用过的功能时遇到了一些问题。

是否有像[self performSelectorOnMainThread:@selector() withObject: waitUntilDone:];android 那样可以从任何类的实例访问的函数,知道这个类不是从 Activity 类继承的。

我发现有一个函数runOnUiThread可以做到这一点,但我不能使用它,因为我需要从非活动对象调用它,所以有没有办法访问当前可见活动或者我应该使用其他解决方案.

0 投票
1 回答
1310 浏览

android - SQL 或一般文件访问在 Android 主 UI 线程中是否合适?

我正在尝试遵循 Android 最佳实践,因此在调试模式下我打开了以下所有功能:

当我尝试在主 (UI) 线程中使用任何类型的文件访问或 SQL 时,Android 现在对我大喊大叫。但我看到很多建议在主线程中使用文件访问和/或 SQL。例如,主要活动应该在内部加载默认偏好值onCreate(),以防它们尚未设置:

糟糕——这会导致在第一次应用程序执行时访问文件,因为onCreate()在 UI 线程上调用。我能看到的唯一解决方法是启动一个单独的线程——它引入了一个与其他 UI 代码的竞争条件,这些代码可能会读取首选项并期望已经设置了默认值。

还要考虑诸如 DownloadManager 之类的服务。(实际上,它的 bug 太大了以至于在现实生活中毫无用处,但让我们假装它工作一秒钟。)如果您排队下载,您会收到一个事件(在主线程上),告诉您下载已完成。要实际获取有关该下载的信息(它只为您提供下载 ID),您必须查询 DownloadManager --- 这涉及一个光标,如果您打开了严格的策略,则会给您一个错误。

那么故事是什么——在主线程中访问游标可以吗?或者这是一件坏事,有一半的 Android 开发团队和 Android 书籍作者忘记了这一点?

0 投票
1 回答
3215 浏览

multithreading - InvokeOnMainThread() 不一定在主线程上调用 - 错误或功能?

我正在使用 aTimer并让它执行定期检查。如果测试条件为真,我启动一个线程并让它做它必须做的事情。

如果在该线程中我想更改我正在使用的 UI InvokeOnMainThread()。但是由于线程是从Timer已经是单独线程的线程触发的,因此InvokeOnMainThread()将在 Timer 的线程上调用事物,而不是在真正的主线程上调用。我通过打两个InvokeOnMainThread()电话来解决这个问题。

这是按预期工作还是 Mono 框架中的错误?主线程是定义为触发当前线程的线程还是应该返回“根”线程?

0 投票
1 回答
264 浏览

android - ListView onItemClick 并不总是反应,繁忙的 UIThread

我有一个ListView,每行有 4 张照片,还有一个照片下载管理器处理所有这些照片的下载。我限制了下载照片的线程数,因为我在到达 ListView 时创建了太多线程(它曾经是:每行 4 张照片 * 显示 5 或 6 行 => 20/25 线程,并且 + if你滚动)

所以问题是 UI 线程很忙,当我在加载照片时单击我的项目时,有时会跳过OnItemClickEvent,用户必须疯狂地等待点击下载结束。

有没有办法避免这样的跳过事件?

更新: 每次下载照片时我都会发送广播,并在我的ListView适配器上发送notifyDataSetChanged 。

0 投票
3 回答
2194 浏览

android - Android onLayout() 和 AsyncTask() 不能一起工作

我需要一个带有固定标题的可滚动表格,所以我关注了这个很棒的博客,一切都很好。

这个想法是使用一个表作为标题,一个表用于在滚动视图中添加的内容,它们都在自定义的线性布局中。在自定义的 LinearLayout 中,我们将覆盖 onLayout() 以获取每行的最大宽度,并为标题和内容表的每一行设置宽度。

这是活动及其布局:

主要的.xml

主要活动

上面的代码完美运行(预期的),但是,当我使用 AnysnTask 从服务器获取数据并稍后将数据添加到表中时,我的自定义视图中的 onLayout() 不再起作用。我通过注销一些数字来模拟获取数据:

因此,onLayout() 仅在我从主 UI 线程调用 appendRows() 并将其放入 onCreate() 方法时才起作用。如果我从另一个 UI 线程(在 AsyncTask 的 onPostExecute() 中)调用,则会调用 onLayout()(我通过创建一些日志来检查它)但它不会影响 GUI。我尝试了 invalidate()、forceLayout()、requestLayout() 但没有改变任何东西。错误的

我认为我们需要调用一个方法来刷新 GUI,但不知道它是什么。

0 投票
2 回答
6137 浏览

java - 如何使计时器任务等到 runOnUiThread 完成

我需要在特定时间段后更新 UI,为此我创建了一个计时器计划,并在其中调用 runOnUiThread。

我遇到的问题是,在达到“3”后,计时器线程跳转到“8”,然后 UI 线程从“4”运行。我想让计时器线程等到 UI 线程在“7”完成它的工作,然后它应该移动到“8”。

样本输出