【发布时间】:2014-04-02 05:45:15
【问题描述】:
在我的 WPF 应用程序中,我有多个类,每个类 implements a message loop。当我创建这些类的对象时,所有这些消息循环都会并行运行。这些对象有时可能会显示一个对话框。主应用程序线程必须密切关注这些对象,并确保它们都不会被对话框卡住(如果确定这种情况,请按取消(退出键))。确定线程的活动前台窗口的正确方法是什么?我知道有一个GetForegroundWindow() API,但它看起来好像在系统级别而不是线程级别工作。
【问题讨论】:
-
您能否进一步解释一下“主应用程序线程必须密切关注这些对象并确保它们都不会卡在对话框中(如果确定这样,请按取消(Escape 键)例)。”
-
没有上下文似乎是一个糟糕的解决方案。为什么您需要多个消息循环,尤其是因为这些循环似乎在进行用户交互?
-
这基本上是一个自动化测试场景。这些类中的每一个都包含一个
WebBrowser,它会打开我们的 ASP.NET 网站的特定页面并填写这些页面上的表单。某些页面有时会显示OpenFileDialog,我们希望摆脱(或有时提供值)。 -
@dotNET 只有一个 GUI 线程,所以这意味着所有打开的窗口都属于该线程,这意味着 GetForegroundWindow 在进程级别和线程级别都是相同的。这是据我所知。
-
@o_weisman:这并不完全正确。我的每个班级都有这个:
thread = new Thread(() => { Application.Run(); });在其中(请参阅我已链接的 Hans Passant 的答案),因此在我的应用程序中可能同时显示多个对话框。虽然这只是我的理论,可能是错误的。
标签: c# .net wpf multithreading winapi