【发布时间】:2016-05-18 14:52:12
【问题描述】:
我相信在 .NET Framework 中发现了一个错误。
总结:
我目前正在开发 Windows Phone 8.1 应用程序,并尝试使用 VisualTreeHelper.GetOpenPopups() 方法。作为参数,我使用了Window.Current。
它无法找到任何当前显示的由MessageDialog 制作的弹出窗口(即使MessageDialog 继承自 (Windows.UI.Popups)。
但是,我能够找到当前显示的任何弹出窗口,这些弹出窗口是我从 ContentDialog 类创建的,因此这里似乎存在错误。
在我将其归类为错误之前,谁能确认我没有从根本上误解某些东西?
深入示例:
我有两个项目正在运行。其中哪个是我的 Windows Phone 项目,另一个是测试我的应用的 NUnit 项目。
在我的 NUnit 项目中,我的代码归结为:
OpenApp(); //Done through Winium which I use for UI testing
OpenPopup; //This works fine, the popup comes.
//Give my root-app window as current window, so it iteratively searches from there.
var popupcount = VisualTreeHelper.GetOpenPopups(Window.current);
如果我在我的 Windows Phone 项目中使用这行代码:
var m = new MessageDialog("");
var popupCount = m.ShowAsync();
那么VisualTreeHelper返回的popupcount在我的NUnit项目中为0。
但是,如果我使用这行代码:
var m = new ContentDialog("");
var popupCount = m.ShowAsync();
不是 0。
【问题讨论】:
-
忘记等待异步方法不是框架错误。正确的名称是“线程竞赛错误”。
-
我的错。在这两种情况下,我都会调用:“await m.showAsync()”。我只是想简化代码。这里的情况是我的 UWP 应用程序正在运行,它正在等待弹出的结果(因此我使用 await,所以我可以等待用户的回答)。在另一个项目中,我正在 UI 测试我的代码,所以当显示弹出窗口时,我尝试访问弹出窗口,以便单击其中的按钮。但是,我无法访问弹出窗口,因为我在 VisualTreeHelper 中找不到按钮的句柄。
-
@oPolo 您应该更新您的问题以表明您正在使用
async,并确保添加所有可能的细节,然后才能认真对待在框架中发现错误的声明。跨度> -
会的。感谢您的反馈。