【发布时间】:2013-11-04 02:35:22
【问题描述】:
当我在单元测试中运行 ShowDialog 调用时,我得到一个
System.Windows.Markup.XamlParseException:当前 SynchronizationContext 不能用作任务调度程序。
从 main 运行正常。我意识到这不是测试仪的正常使用,但是能够选择一个对话框并单击一个按钮以使用测试数据运行它以查看对话框是否有效是很有价值的。但是这个错误阻止我运行它。
在“正确”线程上运行对话框代码是否有技巧?
这是单元测试代码:
[Fact]
static public void Draw2()
{
var uiThread = new Thread(Draw20);
uiThread.SetApartmentState(ApartmentState.STA);
uiThread.Start();
// Wait for the UI thread to finish
uiThread.Join();
}
static void Draw20()
{
ModernUIApp1.MainWindow window = new MainWindow();
System.Windows.Forms.Integration
.ElementHost
.EnableModelessKeyboardInterop(window);
window.ShowDialog();
window = null;
}
窗口代码: >
<mui:ModernWindow.MenuLinkGroups>
<mui:LinkGroup DisplayName="welcome">
<mui:LinkGroup.Links>
<mui:Link DisplayName="home" Source="/Pages/Home.xaml" />
<mui:Link DisplayName="my page" Source="/Pages/BasicPage.xaml" />
</mui:LinkGroup.Links>
</mui:LinkGroup>
<mui:LinkGroup DisplayName="settings" GroupName="settings">
<mui:LinkGroup.Links>
<mui:Link DisplayName="software" Source="/Pages/Settings.xaml" />
</mui:LinkGroup.Links>
</mui:LinkGroup>
</mui:ModernWindow.MenuLinkGroups>
<mui:ModernWindow.TitleLinks>
<mui:Link DisplayName="settings" Source="/Pages/Settings.xaml" />
</mui:ModernWindow.TitleLinks>
</mui:ModernWindow>
【问题讨论】:
-
哪些代码会导致这种情况?也许你可以发布你的代码和你的单元测试细节。
-
您是否在 Google 上搜索过“当前 SynchronizationContext 可能无法用作任务调度程序”?
-
是的,我发现讨论是围绕任务对象进行的。对我的理解没有帮助。
-
此异常源自哪个线程?您的测试线程或您正在创建的 UI 线程?另外,您使用的是哪个单元测试框架?哪个测试运行器?
-
UI 线程获取异常。我正在使用带有 xunit.net 的 Visual Studio 嵌入式测试运行器。
标签: c# wpf xunit.net modern-ui