0

我在 MonoTouch.Dialog 中有一个应用程序,我尝试使用 ActivityElement。

我的计划是首先显示一个活动元素,然后进行我的网络服务调用,当我收到响应时,我将删除活动元素并添加一些新的字符串元素。这不起作用。显示视图后,我无法删除或添加元素。

我该如何解决这个问题?

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 视图中有效,但在我的子视图中无效。我什至试图确保它在主线程上被调用但仍然没有运气......

任何帮助,将不胜感激!

4

2 回答 2

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()方法可以调用您的 Web 服务,存储您的数据,然后InvokeMainThread按照您显示的方式创建您的 Root。

于 2012-09-07T12:35:14.617 回答
0

啊! 知道了!

由于我有第二个 RootElement,我需要在该特定根上调用 ReloadData ......现在它可以工作了!

于 2012-09-24T20:26:40.533 回答