我目前在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線程中起作用!是不是真的?
總是很好的做法是在主線程上對所有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