C# 应用内购买期间的后退按钮/取消按钮

C# 应用内购买期间的后退按钮/取消按钮,c#,exception-handling,windows-phone-8,in-app-purchase,windows-phone,C#,Exception Handling,Windows Phone 8,In App Purchase,Windows Phone,当我按下手机上的“取消”或“上一步”按钮时,我在检测Windows Phone 8的单元测试(Beta app)期间应用内购买商店引发的异常时遇到问题。应用程序只是退出 使用MockIAP时没有错误。取消或后退按钮在等待接收=存储期间返回空的接收变量。。它在MockIAP中处理正确。但很明显,单元测试和真正的应用商店处理事件的方式不同。应用程序只是退出,我相信这是因为它抛出了一个未处理的错误 我的应用程序是Phonegap 2.3,购买部分由插件处理。与MockIAP不同,在购买过程中按下“取消

当我按下手机上的“取消”或“上一步”按钮时,我在检测Windows Phone 8的单元测试(Beta app)期间应用内购买商店引发的异常时遇到问题。应用程序只是退出

使用MockIAP时没有错误。取消或后退按钮在等待接收=存储期间返回空的接收变量。。它在MockIAP中处理正确。但很明显,单元测试和真正的应用商店处理事件的方式不同。应用程序只是退出,我相信这是因为它抛出了一个未处理的错误

我的应用程序是Phonegap 2.3,购买部分由插件处理。与MockIAP不同,在购买过程中按下“取消”或“后退”按钮时,我看不到(即附加断点)包装器侧发生了什么。我已经尝试过在购买的每个步骤中显示
MessageBox.Show
。当我按确认购买时,
MessageBox.Show
代码正在工作,但当我按取消或后退按钮时,代码不起作用。我已经使它与
EventWaitHandle
同步

此外,我为未处理的异常事件设置了
e.Handled=true
,试图阻止它在没有运气的情况下退出应用程序

从网上看,我的购买代码是样板,所以我不明白为什么其他人以前没有遇到过这个问题,为什么网上没有解决方案。有人知道如何解决这个问题吗

Purchase.cs(插件):

App.cs

  private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            Exception ex = (Exception)e.ExceptionObject;

            EventWaitHandle Wait = new AutoResetEvent(false);
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                MessageBox.Show("Unhandled Exception: " + ex.Message);
                Wait.Set();
            });

            Wait.WaitOne();

            // Stop from exiting.. 
            e.Handled = true;

            if (System.Diagnostics.Debugger.IsAttached)
            {
                // An unhandled exception has occurred; break into the debugger
                //System.Diagnostics.Debugger.Break();
            }
        }

要解决此问题,请将try/catch括在RequestProductPurchaseAsync方法调用周围,即使您对整个方法有try/catch

try
{
  receipt = await CurrentApp.RequestProductPurchaseAsync("MyItem", false);
}
catch (Exception){}

.... other code

是的,我一小时前刚做的。。当按下“后退”或“取消”按钮时,似乎会抛出HResult E_fail。生产存储抛出HResult错误,而MockIAP没有。很抱歉,您必须将错误的答案标记为答案。实际的解决办法似乎相当复杂。微软的员工用他们惯常的语气回答:“所有开发者在使用IAP时都会遇到这个问题,但我把你们的问题当作一个非常罕见的问题来对待。”
try
{
  receipt = await CurrentApp.RequestProductPurchaseAsync("MyItem", false);
}
catch (Exception){}

.... other code