【发布时间】:2014-11-29 18:20:38
【问题描述】:
我正在尝试通过制作一个提供有关 Pokemon 信息的基本应用程序来学习 Windows Phone 开发。为此,我创建了一个可移植类库 (PokeLib.dll),因此它与通用应用程序兼容。我已经通过同一解决方案(“测试”)中的一个项目对此进行了测试,它工作正常。您可以在my Github 上查看这些代码,但据我所知,一切都很好。这两个项目在一个解决方案中。对于 Windows Phone 应用程序的解决方案,我将 PokeLib 添加为“现有项目”,添加了引用,并编写了几行代码以确保可以调用它:
MainPage.xaml:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Name="GetDataButton" Content="GetData" Click="GetDataButton_Click" Grid.Row="0" HorizontalAlignment="Center"/>
<TextBlock Name="DataText" Text="Click to get data" Grid.Row="1" Padding="10"/>
</Grid>
MainPage.xaml.cs:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
p = new Pokemon(1); // gets data for Pokemon #1 (Bulbasaur)
}
Pokemon p;
int counter = 0;
private async void GetDataButton_Click(object sender, RoutedEventArgs e)
{
DataText.Text = "Fetching... Count: " + ++counter;
if (counter == 1) // first time button's clicked
{
await p.Create(); // populates the data container
DataText.Text = String.Format("Pokemon #{0}: {1}", p.Id, p.Name);
}
}
当我尝试在手机模拟器上运行它时,我收到以下消息: 。我将项目构建为“调试”并且未选中“启用我的代码”。我不确定在“符号”窗格下该做什么,但如果有用的话,我也可以添加它的屏幕截图。
无论如何,应用程序会打开,但在我按下 GetData 按钮时会冻结。我预计它会冻结一会儿,因为该调用是同步完成的,但这是永久性的。但是,不会引发任何错误/异常。当我尝试进入 p.Create() 调用时,调试器也没有响应(可能源于屏幕截图中的消息)。
有人知道我做错了什么吗?谢谢!
【问题讨论】:
-
某处可能出现死锁。您应该等待您对
p.Create的调用,而不是调用Wait方法。无论如何,等待 UI 线程是不好的做法 -
@KooKiz 我知道,我只是想让一些概念验证工作。我已经用最新的代码更新了帖子。按下按钮后它仍然挂起,我认为这不应该发生,因为 GetDataButton_Click 方法现在是异步的。
-
我意识到这个问题有点老了,但是清理解决方案并重新启动 VS 为我解决了这个错误。
标签: c# .net windows-phone-8 win-universal-app