Monotouch:UIAlertView和WCF服务,debugger.StackTrace

时间:2011-03-24 12:25:15

标签: wcf xamarin.ios uialertview

我目前正在使用单片机中的WCF来调用现有服务和自定义UIAlertView。

问题是,如果我创建一个UIAlertView作为类实例,我会执行以下操作:

public override void ViewDidAppear()
{
 _alertView.Message = "Loading...";
 _alertView.Show();

 _client.GetDataAsync("test");
 _client.GetDataCompleted += GetDataCompletedDelegate;

 base.ViewDidAppear();
}

void GetDataCompletedDelegate(object sender, GetDataEventArgs)
{
 // do someting with data
 _alertView.Hide();
}

它有效,但这个建议写在控制台中: UIAlertView:wait_fences:未能收到回复:10004003

否则,如果我尝试运行此代码:

public override void ViewDidAppear()
{
 using(CustomAV _alertView = new CustomAV())
 {
   _alertView.Message = "Loading...";
   _alertView.Show();

   _client.GetDataAsync("test");
   _client.GetDataCompleted += delegate{ 
     InvokeOnMainThread(delegate{
      // do someting with data
      _alertView.Hide();
     });
  };
 }

 base.ViewDidAppear();
}

第一次运行代码,但现在显示警报。第二次模拟器无法启动。 无法在bootstrap服务器上注册“com.yourcompany.wcftest”。错误:未知的错误代码。这通常意味着此进程的另一个实例已在调试器中运行或挂起.StackTrace。在这种情况下,我必须重新启动计算机。

提前谢谢。

修改

谢谢Geoff,我已经检查了我的代码并进入了GetDataCompletedDelegate,我插入了一个在UI Thread中运行的函数。

InvokeOnMainThread(delegate{
 doSomething();
});

private void doSomething()
{
 // do stuff here
 _alertView.Hide();
}

fency错误继续出现。如果我在doSomething()方法中使用你的解决方案,它可以工作

_alertView.InvokeOnMainThread(delegate{
 _alertView.Hide();
});

为什么呢?也许我不理解,但在第一段代码中做某事()在UI线程中工作!不是真的吗?

1 个答案:

答案 0 :(得分:1)

这里有两个独立的问题。

1:_alertView.Hide()未在UI线程上运行(这是导致围栏错误的原因)

2:在你的第二个例子中,你在创建UIAlertVeiw之后立即处理它,但是你有一个实例委托悬挂它。这会以一种困难的方式崩溃运行时,然后再次运行它,因为旧的崩溃进程仍在运行,模拟器不会让你启动第二个实例。

用例#1但是_alterView.InvokeOnMainThread(委托{_alertView.Hide();});