Monotouch:UIAlertView和WCF服务,调试器.StackTrace
我目前在Monotouch中使用WCF调用现有服务和自定义UIAlertView。Monotouch:UIAlertView和WCF服务,调试器.StackTrace
的问题是,如果我创建一个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();
}
第一次运行的代码,但现在显示警报。第二次模拟器无法启动。 无法在引导服务器上注册“com.yourcompany.wcftest”。错误:未知的错误代码。这通常意味着这个过程的另一个实例已经运行或者挂在调试器中.StackTrace。在这种情况下,我必须重新启动机器。
预先感谢您。
编辑:
谢谢杰夫,我检查了我的代码,进入GetDataCompletedDelegate我插入的UI线程中运行的功能。
InvokeOnMainThread(delegate{
doSomething();
});
private void doSomething()
{
// do stuff here
_alertView.Hide();
}
继续出现fency错误。如果我在doSomething()方法中使用你的解决方案,它可以工作
_alertView.InvokeOnMainThread(delegate{
_alertView.Hide();
});
为什么?也许我不明白,但是在代码的第一部分中,某些()函数在UI线程中起作用!是不是真的?
你在这里有2个单独的问题。
1:_alertView.Hide()是不是在UI线程上运行(这是什么原因造成的围栏错误)
2:在第二个例子中,你在创建后立即处置的UIAlertVeiw,但你有一个实例委托关闭它。这会以一种困难的方式崩溃运行时,然后当你再次运行它时,因为旧的崩溃的进程仍在运行,模拟器不会让你启动第二个实例。使用案例#1,但_alterView.InvokeOnMainThread(委托{_alertView.Hide();}); _alterView.InvokeOnMainThread(委托{_alertView.Hide();});
总是很好的做法是在主线程上对所有UI进行更改。因此,在'InvokeOnMainThread(delegate {})'中放置'_alertView.Show()'。这有时会导致不正常的行为。它可能无法解决你的问题,但正如我所说,它可能是一些不寻常行为的原因。 – Luke 2011-03-24 12:41:10
谢谢卢克。事实是'_alertView.Show()'(在代码的第二部分)正在主线程中运行,不是真的吗? – 2011-03-24 13:34:17
'_alertView.Hide()'是,但我看不到'.Show()'是...除非你的自定义类在主线程本身上运行它? – Luke 2011-03-24 14:07:17