C# 在覆盖异步任务时应用程序崩溃

C# 在覆盖异步任务时应用程序崩溃,c#,xaml,windows-phone-8.1,C#,Xaml,Windows Phone 8.1,我正在使用windows phone 8.1。在这里,我创建了简单的两页第一页包含两个按钮 <Grid> <StackPanel> <Button x:Name="btnNextPage" Content="Next Page" HorizontalAlignment="Center" Click="btnNextPage_Click" /> <Button x:Name="btnMessageDisplay

我正在使用windows phone 8.1。在这里,我创建了简单的两页第一页包含两个按钮

   <Grid>
    <StackPanel>
        <Button x:Name="btnNextPage" Content="Next Page" HorizontalAlignment="Center" Click="btnNextPage_Click" />
        <Button x:Name="btnMessageDisplay" Content="Message Display" HorizontalAlignment="Center" Click="btnMessageDisplay_Click" />

    </StackPanel>
</Grid>
这工作很好。但当按住第一个按钮并两次单击BTN消息显示按钮应用程序崩溃时,问题就出现了

我知道为什么会这样,因为异步任务。但我不知道这个问题的解决方案。 请给我答案

我得到以下例外

AsyncTesting.exe中发生“System.UnauthorizedAccessException”类型的异常,但未在用户代码中处理


访问被拒绝。(HRESULT的例外:0x80070005(E_ACCESSDENIED))

我在MSDN上找不到指南,但WP上的系统可以一次显示一个对话框。当您尝试显示第二个对话框时,系统将抛出UnauthorizedException

做一个简单的测试:

private void TestBtn\u单击(对象发送方,路由目标)
{
Dispatchermer timer1=新Dispatchermer(){Interval=TimeSpan.FromSeconds(3)};
Dispatchermer timer2=新Dispatchermer(){Interval=TimeSpan.FromSeconds(4)};
timer1.Tick+=async(s1,e1)=>{timer1.Stop();等待新消息对话框(“第一”).ShowAsync();};
timer2.Tick+=async(s2,e2)=>{timer2.Stop();等待新消息对话框(“第二”).ShowAsync();};
timer1.Start();timer2.Start();
}
如果您快速关闭第一个对话框,这将是正常的,但如果您没有,在第二个对话框显示后,您将有一个异常

同样的情况在您的情况下-您快速单击负责显示对话框的按钮-第一个按钮显示,但第二个已解决的clicked事件引发异常。在这种情况下,您可以使用简单标志:

private bool btnResolved=true;
异步专用无效BTN消息显示\单击(对象发送方,路由目标)
{
如果(!btnResolved)返回;
btnResolved=false;
msg.Content=“你好,朋友……”;
msg.Title=“消息”;
等待msg.ShowAsync();
btnResolved=true;
}

您还可以考虑禁用按钮,而不是使用标志。

请提供有关崩溃的更多详细信息。你有例外吗?所以你在做一些你无法访问的事情,这几乎是这里所有人都能说的。你在哪一行得到这个例外?堆栈跟踪是什么?在这一行上等待msg.ShowAsync();Thanx Bro,它在工作……但我认为这是一种修补。@ChiragSolanki这只是一个设计问题。有很多地方可能会抛出异常,您必须处理它们。
  MessageDialog msg = new MessageDialog("","");
    async private void btnMessageDisplay_Click(object sender, RoutedEventArgs e)
    {
        msg.Content = "Hello Friends...";
        msg.Title = "Message";
       await msg.ShowAsync();
    }

    private void btnNextPage_Click(object sender, RoutedEventArgs e)
    {
        Frame.Navigate(typeof(SecondPage));

    }