【发布时间】:2012-07-19 10:21:21
【问题描述】:
我需要一些帮助来解决这个问题。
场景:
- 启动 3 个线程(每个线程具有不同的值)(使用 TPL 或使用 ThreadPool)
- 每个线程收集一些不同的数据
- 为每个线程打开一个窗口,其中包含来自线程的特定数据
- 用户在每个窗口中输入一些值
- 值被发送回特定线程
- 一些额外的工作
- 完成
现在,问题是,我无法在线程内打开窗口,因为它必须是 GUI 线程 (ApartmentState.STA)。
知道如何处理窗口/用户输入的问题吗?
【问题讨论】:
-
你不应该让线程等待用户输入。这就是问题的根源。
-
这对我来说没有意义。为什么要同时打开三个窗口?用户将无法同时使用所有这些。
-
“现在,问题是,我无法在线程中打开窗口”打开窗口已经是线程:)
-
@svick - 这确实是一个问题。有几种方法可以做 OP 想要的事情,但这是一个普遍的问题:( 来自其他线程的 UI 窗口往往会在用户已经填写一个时弹出,窃取焦点并且通常会惹恼用户。它可以解决,例如,仅使用一个表单,在线程通知的新标签页中添加一个新框架,而不是从原始页面获取焦点 - 用户可以在填写/确定后依次填写其他页面第一个。
-
@HenkHolterman - 是的,在大多数情况下,你是对的 - 线程“中间”的 UI 很痛苦。然而,有时这是不可避免的。现在引起我问题的应用程序就是这样一个(尽管它是 Delphi,而不是 C#,但同样的问题)。它有多个线程运行脚本解释器实例(REMobjects Pascal)。一个命令是“GetUserInput()”。除了向 UI 发送消息以创建 Edit/RadioButton/List/Checkbox/whatever 表单并在解释器线程可以“执行”下一行脚本之前等待用户输入完成之外,我没有看到任何其他实现方式.
标签: c# wpf multithreading threadpool task-parallel-library