我在MonoTouch.Dialog中有一个应用程序,我尝试使用ActivityElement。
我的计划是先显示一个activity元素,然后进行webservice调用,当我得到响应时,我会删除activity元素,而是添加一些新的字符串元素。 这不起作用。显示视图后,我无法删除或添加元素。
我该如何解决这个问题?
rootElement = new RootElement ("Mobile Servicedesk"){
(requestSection = new Section ("My requests"){
new ActivityElement()
})
};
new Thread (() => {
var incidents = IncidentProvider.LoadMyRequests ();
requestSection.Elements.Clear ();
foreach (var item in incidents) {
requestSection.Elements.Add (new StringElement(item.Name))
}
}
).Start ();
修改
好的,现在我已经解决了更新部分,至少在我的解决方案的一部分中。
InvokeOnMainThread (() => {
ReloadData();
});
ReloadData()在我的appDelegate视图中工作,但不在我的子视图中。我甚至试图确保它在主线程上被调用但仍然没有运气......
任何帮助将不胜感激!
答案 0 :(得分:1)
这是我在我的应用中使用的代码'完全按照你想要做的。
LoadingView loading;
ThreadPool.QueueUserWorkItem ((f) => {
// runs UI stuff on main thread
InvokeOnMainThread (delegate {
loading = new LoadingView();
loading.Show("Do something...");
});
// Methods that do whatever you wan, that runs on a different thread
DoSomething();
// runs UI stuff on main thread
InvokeOnMainThread (delegate {
loading.Hide();
new UIAlertView("Title", "Message", null, "Button", null).Show();
});
});
您的主要问题是,当您执行new Thread(...)
时,您想要编辑您的UI,如果这不在主线程中,这是不可能的。
在我的示例中,DoSomething()
方法,您可以调用您的网络服务,存储您的数据,然后在InvokeMainThread
中按照您显示的方式创建您的Root。
答案 1 :(得分:0)
啊!明白了!
由于我有第二个RootElement,我需要在该特定的根上调用ReloadData ...现在它可以工作了!