【发布时间】:2012-01-24 18:31:29
【问题描述】:
我认为我没有完全找到我正在寻找的东西,并且不确定是否可能......我已经与后台工作人员一起完成流程并在某些“ProgressChanged”事件期间从后台提取消息worker 并更新给定的窗口对话框。没问题。
新项目...在我试图在后台工作人员上运行的某个过程中,根据某些条件,我需要它在恢复其操作之前实际调用一个新的窗口对话框以获取用户输入。 . 伪格式..
Start Window
Click Button For Action
Create BackgroundWorker (BGW) and enable progress changed
Link BGW "ProgressChanged" to CurrentWindowCheckProgress method
run BGW process
在 BGW 中,在某些情况下,我会更新进度并在 BGW 上有一个标志,我需要向用户显示特定的对话框 X。因此,通过 ReportProgress(),CurrentWindowCheckProgress 方法的挂钩被命中(在 UI 线程上)。此方法看到标志,需要创建一个新的 Window(),从中获取答案,然后返回 BGW 线程继续。
到目前为止,所有逻辑都按计划运行,但出现错误
“调用线程必须是STA,因为很多UI组件都需要这个。”
那么,我需要如何/做什么来向用户显示我的临时表单“TestPromptWindow”。
这是 C#、WPF、VS2010、.Net 4.0
【问题讨论】:
-
你能贴出你用来显示TestPromptWindow的代码吗?
-
听起来确实不像您实际使用 ProgressChanged 事件。正如您所描述的那样,调用 ReportProgress() 不会阻塞 BGW 线程。您将不得不在工作人员内部使用 Dispatcher.Invoke()。
标签: c# wpf user-interface backgroundworker