问题标签 [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 投票
5 回答
5092 浏览

c# - 在 Java/J2ME 中与 UI 线程交互

我正在编写一个 J2ME 应用程序。其中之一是定期轮询目录的内容,如果有任何新内容,则将它们绘制在屏幕上。我通过让 UI 表单启动一个带有指向自身的指针的轮询线程来完成此操作,并且当轮询线程找到某些内容时,它会回调表单并调用同步方法来更新它的显示。这似乎工作正常。

我的问题是这个。在 C#/.NET 中,我知道让非 UI 线程更新 UI 并不好,处理此问题的正确方法是将其委托给 UI 线程。

例如以下:

是否有 J2ME 等价物来管理这个过程?Java怎么样?还是 Java/J2ME 在这方面做得更好?如果没有,这是如何完成的?

[编辑] Swing 似乎支持我通过 SwingUtilities.invokeLater() 和 invokeAndWait() 方法提出的问题。J2ME 是否有等效的框架?

0 投票
5 回答
6320 浏览

winforms - 在不存在控制对象的情况下在 UI 线程上运行代码

我目前正在尝试编写一个组件,它的某些部分应该在 UI 线程上运行(解释会很长)。因此,最简单的方法是将控件传递给它,并在其上使用 InvokeRequired/Invoke。但我认为将控件引用传递给“数据/背景”组件不是一个好的设计,所以我正在寻找一种在 UI 线程上运行代码而不需要可用控件的方法. WPF中的Application.Dispatcher.Invoke之类的...

任何想法,谢谢马丁

0 投票
3 回答
2537 浏览

java - 多个 Swing 事件调度线程

我想在 Swing 中创建一个新的事件调度线程,但我在网上找不到任何关于如何执行此操作的参考资料。我通过创建一个新线程并调用 Application.run(...) 在 .NET 中完成了这项工作。有人做过吗?在 Swing 中可以吗?

仅供参考,我尝试这样做的原因是因为我正在编写一个 Eclipse 插件,并且我想弹出对 IDE 来说不是模态但对我的 UI 逻辑来说是模态(阻塞)的对话框。我可以使用非模态对话框和回调来完成此操作,但这需要使我的代码成为多线程的开销。如果前者是不可能的,我会恢复到那个。

0 投票
2 回答
2753 浏览

c# - 如何确定方法是否以解耦方式在 UI 线程上执行?

这是我遇到的问题:我需要确保在 UI 线程上实例化了一个对象。如果不是,它应该抛出异常。但是如何在方法内部检查它是否在 UI 线程上运行?注意:我不想将任何信息传递给对象的构造函数。

完美的候选者将是 DispatcherSynchronizationContext(SynchronizationContext 的 WPF 实现),它在内部保存对 Dispatcher 的引用,该引用引用了与其关联的线程,但不幸的是,该字段是私有的,因此我无法访问它。

0 投票
6 回答
18405 浏览

c# - 如何检测我们是否在 UI 线程上?

为了论证的目的,将 UI 线程视为已调用Application.Run()或调用其中一个重载并运行活动消息循环的线程。

有没有办法检测我们当前是否在这样的线程上执行?

我想要这个的原因是因为我有一个具有长期运行的私有函数的类。该类本身已经是多线程的,并且此类的使用使得它可以从 UI 或后台线程进行处理时使用。这个功能也落入了这个网。但我不希望它阻塞 UI 线程。所以我想检测我是否在 UI 线程上运行,如果是,则将函数调用分叉到后台线程中(可能ThreadPool,但这不是本次讨论的问题)。这完全是行为良好的,但后台线程可能依赖于函数的输出,因此对它们来说阻塞更好,而 UI 线程以更“一劳永逸”的方式访问它。

0 投票
2 回答
1044 浏览

watin - 是否可以在 UI 线程上运行quartz.net 作业?

我正在使用 Watin 进行浏览器测试,它必须在 UI 线程上运行。

我想使用 Quartz.NET 安排作业,但无法找到在 UI 线程上运行它的方法(使用 WPF 应用程序)

有任何想法吗?

0 投票
2 回答
943 浏览

winforms - 通知 BackgroundWorker 来自另一个类的进度更改

我想使用 BackgroundWorker 或 Thread 从我的 Windows 窗体中调用位于我的业务层中的类的方法。如果有人在听,我希望这个业务层中的方法能够报告它的进度,因为它可能需要一段时间才能完成。由于我可能从 BackgroundWorker 开始,然后决定使用常规线程,因此我不想与其中任何一个联系在一起。

如果方法不知道它是否被后台工作人员调用,那么报告其进度的最佳方法是什么?我正在考虑在我的业务层类上提供一个事件,如果有人在听,它可以发布它的进度。

框架中是否已经有一个代表?更好的是我可以实现的接口——比如 INotifyProgressChanged?

0 投票
4 回答
10518 浏览

c# - 从异步回调方法与 UI 线程交互?

我有一个在System.Net.Sockets.NetworkStream.BeginRead完成时异步调用的方法。

在那个回调方法中,我需要与 UI 线程交互。

这会在方法完成后导致异常。(执行 End Sub 时)

Undo 操作遇到的上下文与在相应的 Set 操作中应用的上下文不同。可能的原因是在线程上设置了上下文并且未还原(撤消)。

那么如何通过回调方法与 UI 线程交互呢?我究竟做错了什么?

0 投票
3 回答
10215 浏览

c# - 如何在 UIThread 上测试 Prism 事件聚合器订阅?

我有一个类,它通过 PRISMs 事件聚合器订阅一个事件。

由于这里提到的模拟事件聚合器有点困难,我只是实例化一个真实的聚合器并将其传递给被测系统。

然后在我的测试中,我通过该聚合器发布事件,然后检查我的被测系统如何对其做出反应。由于该事件将在生产期间由 FileSystemWatcher 引发,因此我想通过订阅 UIThread 来利用自动调度,因此一旦引发事件,我就可以更新我的 UI。

问题是,在测试期间,除非我不在 UIThread 上订阅,否则事件在被测系统中永远不会被注意到。

我正在使用 MSpec 进行测试,我通过 TDD.Net 从 VS2008 内部运行。添加[RequiresSta]到我的测试类没有帮助

有没有人有一个解决方案,可以避免我在测试期间更改 ThreadOption(例如通过属性 - 多么丑陋的黑客)???

0 投票
3 回答
1247 浏览

java - Guice 在 UI 线程问题之外创建 Swing 组件?

我正在使用 Google Guice 作为 IOC 容器来开发 Java Swing 应用程序。事情进展顺利。有一些用户界面问题。当标准 L&F 替换为推送像素时,由于 Guice 的 Swing 组件在 UI 线程之外创建,Substance L&F 应用程序未运行。

有没有办法告诉 Guice 在 UI 线程中创建 Swing 组件?

也许我应该创建自定义提供程序,在SwingUtilities.invokeAndWait(Runnable)创建它们后返回 Swing 组件。

我不喜欢在 UI 线程中运行整个应用程序的想法,但也许这只是一个完美的解决方案。